在 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结尾域名。