ssh

ssh

连接服务器

1
2
3
4
5
ssh root@linlc.cc -p 22 -i ~/Desktop/key.pem -o serveraliveinterval=60
# 账户 root,地址 linlc.cc,
# -p 端口 22
# -i 证书路径 key.pem
# -o serveraliveinterval=60 长连接间隔 60s(可防止被踢掉)

配置

1
vi /etc/ssh/sshd_config
1
2
3
4
5
6
7
8
9
10
11
12
13
Port 51022	# 端口
PermitRootLogin yes # 允许 root 登录
PasswordAuthentication yes # 允许 密码登录
# RSAAuthentication yes # 需要rsa密钥
# PubkeyAuthentication yes # 需要公钥
# AuthorizedKeysFile ~/.ssh/authorized_keys # 公钥存放的文件(权限为600)(%%表示%,%h用户主目录,%u用户的用户名)
ClientAliveInterval 3600 # 客户端保持连接时长 秒
# DenyUsers zhangsan lisi # 黑名单 阻止 zhangsan, lisi 登录
# AllowUsers wangwu # 白名单 允许 wangwu 登录

# 主机私钥文件位置,可以多个私钥,注意文件权限600
# HostKey /etc/ssh/ssh_host_rsa_key # 使用的私钥1(ssh版本2)
# HostKey /etc/ssh/ssh_host_dsa_key # 使用的私钥2(ssh版本2)
1
2
3
vi ~/.ssh/config
# UserKnownHostsFile /dev/null
# StrictHostKeyChecking no # 严格验证所连接远程主机的公钥 ~/.ssh/known_hsots 是否在这个里面

免密登录

主机A,免密登录主机B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 主机A的操作 ----------
# 主机A 生成公钥,私钥(会让你输入路径、与密码。私钥id_rsa, 公钥id_rsa.pub)
ssh-keygen -t rsa -C "youname@example.com"

# 主机A cd 到生成私钥的路径,登录私钥
ssh-add id_rsa

# 主机A 复制 id_rsa.pub 里面的内容到主机B 的authorized_keys文件中
cat id_rsa.pub #(复制打印出来的内容)

# 主机B的操作----------
# 主机B 修改配置文件sshd_config,并开启密钥登录
AuthorizedKeysFile ~/.ssh/authorized_keys

# 注意 authorized_keys 文件权限为 600, .ssh文件夹对应用户权限为700
# 主机B 添加 主机A的公钥 到上面的authorized_keys文件里面
echo 主机A的公钥内容 >> authorized_keys

# 重启主机B的sshd----------
# 重启 sshd
/etc/init.d/sshd restart
# 或
service sshd reload

linux用户

user, groups(用户和组)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前用户组
groups

# 查看当前用户名
whoami

# 查看 loganv用户的组
groups loganv

# 修改密码,root修改loganv密码(自己改自己密码就只用passwd)
# -l 锁定密码
# -u 解除锁定
# -d 清空用户密码
# -S 查看密码状态
passwd loganv

配置文件

1
2
3
4
5
6
# 所有组的信息 影子口令文件 /etc/gshadow
vi /etc/group

# 组名:组密码:GID:用户列表(,分割,如果没有则为GID用户)
root:x:0:
loganv:x:1088:
1
2
3
4
5
6
7
8
# 所有用户的信息 影子口令文件 /etc/shadow
vi /etc/passwd

# 用户名:密码:UID:GID:身份描述:主目录:登录shell
zzz:x:1093:1093::/home/zzz:/bin/bash

# 让git用户登陆后,只能运行git-shell命令
# git:x:1000:1001:,,,:/home/git:/usr/bin/git-shell
1
2
3
4
# 编辑超级管理员(vi /etc/sudoers)
visudo
# 新增一条记录
loganv ALL=(ALL) NOPASSWD: ALL

相关命令

1
2
3
4
5
# 切换 root 用户(sudo su)
sudo -i

# 切换 loganv 用户
su loganv
1
2
3
4
5
# 新增 loganv 用户
useradd loganv
# 删除 loganv
# -r 并删除用户的主目录
userdel loganv

kamailio

安装

安装参考官方文档
开发问题,入门必看必学 cookbook
多看官方的 module 文档

信息参考
https://www.oschina.net/project/tag/252/sip
客户端 jssip, linphone
https://sipjs.com/
https://jssip.net/
其他sip服务
https://www.opensips.org/Documentation/Modules-3-0

kamailio.cfg 文件

1
2
3
4
5
6
7
8
# 启用 nat 加入下面一行(不要忘记#也要加)
#!define WITH_NAT

# 配置自定义域名
alias="114.linlc.cn"

# 允许 header 中没有 content-length 这个参数
tcp_accept_no_cl=yes
编写 websocket 代码

参考文档

注意:在编译安装 kamailio 前,需要添加 websocket 模块
1
2
3
4
5
# 编辑源代码目录下的 modules.lst文件
vi ($KAMAILIO_SRC_PATH)/src/modules.lst

# 修改如下,后重新 make
include_modules=websocket

如果报错 unistr.h 找不到,则需要操作系统安装 libunistring-devel,然后重新编译安装
如果编译报错,通常是操作系统没有安装 module 源文件里面需要导入的库,我们在操作系统安装下就行了

可能遇见的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 开启 websocket 需用到 nat,与下面模块
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "xhttp.so"
loadmodule "nathelper.so"
loadmodule "websocket.so"


# nathelper 与 registrar 模块需要设置相同的 received_avp
modparam("registrar", "received_avp", "$avp(i:42)")
modparam("nathelper", "received_avp", "$avp(i:42)")


# 如需要 webrtc 传输音视频,需 rtpproxy 模块,并设置参数
loadmodule "rtpproxy.so"
modparam("rtpproxy", "rtpproxy_sock", "udp:192.168.31.199:20000")


# 允许跨域
modparam("websocket", "cors_mode", 1)

# 如果websocket连接不上, event_route[xhttp:request] 里面验证了只能80,443端口,可以把验证关掉

# 在 request_route 第一行添加
add_local_rport();

启动 rtpproxy

1
rtpproxy -l 192.168.31.199 -s udp:192.168.31.199 20000 -F