Blog·Leo LiABOUT

Linux - 使用ssh秘钥免密码登录Linux

25 Dec 2017

Linux 远程登录一般都用ssh协议,具体有两种方式:

  1. 用户名密码登录
  2. 用户名秘钥登录

使用用户名密码登录时有受到“中间人攻击”的风险,所以推荐使用用户名秘钥登录,下面介绍如何配置ssh秘钥免密码登录远程Linux服务器。

  1. 配置远程Linux服务器上的sshd配置文件(etc/ssh/sshd_config):
# 禁止密码登录
PasswordAuthentication no

# 开启秘钥登录公钥验证登录
RSAAuthentication yes
PubkeyAuthentication yes

# 指定授权公钥所在的文件地址
# 如下配置是去当前用户家目录下的.ssh目录寻找authorized_keys文件,这也是一般配置
AuthorizedKeysFile      .ssh/authorized_keys

# 如下配置可以解决ssh登录慢的问题
GSSAPIAuthentication no
UseDNS no
  1. 以上配置都修改好之后保存退出,然后重启sshd服务
sudo systemctl restart sshd
  1. 在本地主机上配置ssh公秘钥对(详细步骤参考最后的参考文章,windows可以用putty,*nix直接命令行ssh-keygen 即可)

  2. 注意ssh秘钥登录时,远程Linux主机随机反过来一串字符串,本地在当前用户的家目录下寻找秘钥进行加密传送到远程Linux,然后远程Linux按照上面配置 在要登录的用户的家目录下的.ssh目录中的authorized_keys文件中寻找匹配公钥进行解密,得到的字符串与最初发送出去的字符串进行比对,匹配上则登录成功,反之则 失败,所以这里一定要注意:本地当前用户要登录远程Linux中的用户

  3. 很有可能上面步骤都正确结果还是无法登录,这是就要看一下权限问题,ssh秘钥登录对$HOME目录、$HOME/.ssh目录以及$HOME/.ssh/authorized_keys文件 的权限都有严格要求,过大的权限会导致额外的风险,因此ssh不认,正确的权限配置如下:

chmod 700 $HOME
chmod 700 $HOME/.ssh
chmod 600 $HOME/.ssh/authorized_keys

参考:

  1. SSH 原理和基本使用:ssh 安全配置 以及ssh key 认证登录