在 centOS 上设置 SSH 用户配置(本地客户端)
本机安装 SSH,与服务器端上安装方式是一样的,都是使用安装 OpenSSH 软件和其依赖软件包 OpenSSL。
# 安装dnf -y install openssl openssh # 查看版本ssh -V
从本机客户端 centOS 进行 ssh 连接,可以在连接的时候,直接附带上连接参数,也可以在本机客户端用户配置文件中设置。用户配置文件有两个:用户全局配置文件/etc/ssh/ssh_config,当前用户配置文件~/.ssh/config。
在 ssh 连接上配置参数:
ssh -o ServerAliveInterval=60 admin@192.168.0.50
持久连接
实现客户端保持永久连接,需要分别配置服务端和客户端。服务端的配置是修改/etc/ssh/sshd_config文件,设置参数ClientAliveInterval 60、ClientAliveCountMax 3,而客户端的实现,其实就是让客户端 ssh 定时发送信息,这样使得连接不会一段时间不操作后中断。
设置用户全局配置文件/etc/ssh/ssh_config(注意:不是/etc/ssh/sshd_config文件):
# 在客户端全局配置vim /etc/ssh/ssh_config
Host *
ServerAliveInterval 60
认证方法顺序
客户端发起 SSH 连接的时候,默认值认证方法顺序:publickey,gssapi-keyex,gssapi-with-mic,password。
- 公钥认证(publickey)
- GSSAPI 认证(gssapi-keyex,gssapi-with-mic)
- 密码认证(password)
SSH 认证过程会依次尝试,前面的认证失败了,才会采用后面的认证方式,这就浪费时间,也就造成 SSH 登录慢。关于 GSSAPI 相关的认证,消耗的时间比较多,具体可以查看 SSH 连接日志。所以修改为:先公钥认证,后密码认证。
# 在客户端全局配置vim /etc/ssh/ssh_config
Host *
ServerAliveInterval 60
PreferredAuthentications publickey,password,gssapi-keyex,gssapi-with-mic
# /etc/ssh/ssh_config
Host * # 选项 Host 只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
Port 22 # 设置连接到远程主机的端口。
ForwardAgent no # 设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no # 设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
RhostsAuthentication n # 设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no # 设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes # 设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes # 设置是否使用口令验证。
FallBackToRsh no # 设置如果用ssh连接出现错误是否自动使用rsh。
UseRsh no # 设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no # 如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes # 设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
StrictHostKeyChecking no # 如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
IdentityFile ~/.ssh/identity # 设置从哪个文件读取用户的 RSA 安全验证标识。
Cipher blowfish # 设置加密用的密码。
EscapeChar ~ # 设置escape字符。
配置主机名
本机客户端当前用户 ssh 配置,常用来配置 ssh连接的时候,主机名以及密钥位置。
# 假设当前用户为 admin,若在其他用户下,需要切换过来,避免再修改文件所有者su admin # 在客户端用户配置vim ~/.ssh/config
注意:~/.ssh目录文件,应该属于当前用户自己。若使用 root 用户,修改其下的文件,会被改变文件所有者以及所属组,需要修改文件所有者:
chown -R admin:wheel ~/.ssh
示例配置如下:
Host example # 关键词
HostName example.com # 主机地址
User root # 用户名
# IdentityFile ~/.ssh/id_ecdsa # 认证文件
# Port 22 # 指定端口
当具备上面的配置后,通过执行ssh example,就可以登录我的服务器。而不需要敲更多的命令ssh root@example.com。又如想要向服务器传文件,可以执行命令:scp a.txt example:/home/user_name。更过相关帮助文档请参考:man ssh_config 5。
Host example.com
HostName example.com
Port 22
User develop
IdentityFile ~/.ssh/id_rsa
Host example.com
HostName 192.168.0.50
Port 5678
User root
IdentityFile ~/.ssh/id_rsa
Host sshtest
HostName www.test.com
User user
Port 22
IdentityFile ~/.ssh/id_rsa_test
Host ssttest2
HostName www.test2.com
User user2
Port 222
IdentityFile ~/.ssh/id_rsa_test2
IdentitiesOnly yes
- Host:服务器别名,只要是合法的变量名称且不重复即可,可任意指定,ssh 命令通过该名称来连接到指定服务器,比如上面的 example.com、sshtest。
- Hostname:服务器地址,可以是域名,也可以是 ip 地址。
- Port:端口号,默认为 22,只有修改了 ssh 连接的默认端口才需要配置此参数。
- User:登陆远程客户端中的用户。
- IdentityFile:ssh 私钥文件的路径(不带.pub 后缀的文件)。
- IdentitiesOnly:只接受 SSH key 登录。
SSH配置项参数值可以使用通配符:
*:代表 0~n 个非空白字符。Host *:匹配所有主机名。*.example.com:匹配以.example.com结尾域名。?:代表一个非空白字符。192.168.0.?:匹配 192.168.0.[0-9]的 IP。!:代表排除的意思。!*.dialup.example.com,*.example.com:匹配以.example.com结尾域名。但要排除以.dialup.example.com结尾域名。
