
Linux 远程登录一般都用ssh协议,具体有两种方式:
- 用户名密码登录
- 用户名秘钥登录
使用用户名密码登录时有受到“中间人攻击”的风险,所以推荐使用用户名秘钥登录,下面介绍如何配置ssh秘钥免密码登录远程Linux服务器。
- 配置远程Linux服务器上的sshd配置文件(etc/ssh/sshd_config):
# 禁止密码登录
PasswordAuthentication no
# 开启秘钥登录公钥验证登录
RSAAuthentication yes
PubkeyAuthentication yes
# 指定授权公钥所在的文件地址
# 如下配置是去当前用户家目录下的.ssh目录寻找authorized_keys文件,这也是一般配置
AuthorizedKeysFile .ssh/authorized_keys
# 如下配置可以解决ssh登录慢的问题
GSSAPIAuthentication no
UseDNS no
- 以上配置都修改好之后保存退出,然后重启
sshd服务
sudo systemctl restart sshd
-
在本地主机上配置
ssh公秘钥对(详细步骤参考最后的参考文章,windows可以用putty,*nix直接命令行ssh-keygen 即可) -
注意
ssh秘钥登录时,远程Linux主机随机反过来一串字符串,本地在当前用户的家目录下寻找秘钥进行加密传送到远程Linux,然后远程Linux按照上面配置 在要登录的用户的家目录下的.ssh目录中的authorized_keys文件中寻找匹配公钥进行解密,得到的字符串与最初发送出去的字符串进行比对,匹配上则登录成功,反之则 失败,所以这里一定要注意:本地当前用户、要登录远程Linux中的用户 -
很有可能上面步骤都正确结果还是无法登录,这是就要看一下权限问题,
ssh秘钥登录对$HOME目录、$HOME/.ssh目录以及$HOME/.ssh/authorized_keys文件 的权限都有严格要求,过大的权限会导致额外的风险,因此ssh不认,正确的权限配置如下:
chmod 700 $HOME
chmod 700 $HOME/.ssh
chmod 600 $HOME/.ssh/authorized_keys
参考: