Linux SSH免密登录

目标:客户端(C)免密SSH登录服务器(S)。
前置条件:两台设备均开启SSH服务,服务端(S)启用公钥认证。

在客户端(C)生成SSH密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 参数:
#    -t rsa 指定密钥类型为RSA。
#    -b 4096 指定密钥的长度为4096位,这是目前较为安全的长度。
#    -C "your_email@example.com" 为密钥添加注释,这有助于标识密钥的用途或拥有者。

密码置空即可,然后进入~/.ssh/目录查看内容:

# ls -l

我们看到有几个文件,下面分别解释下每个文件是干什么用的:

-authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。
-id_rsa: 生成的私钥文件
-id_rsa.pub: 生成的公钥文件
-known_hosts: 已知的主机公钥清单

上传公钥

将公钥内容复制到服务器端(S)的~/.ssh/authorized_keys文件中

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100 -p 22
# 参数:
    -i 指定本地公钥文件
    -p 指定远程服务器端口,默认22端口可以忽略该参数

以上代码如果执行无误,就会要求输入服务端(S) SSH 登录密码,按要求输入。
成功了的话,可能会有提示,用 ssh -p '22' 'root@192.168.1.100' 登录。

ssh -p '22' 'root@192.168.1.100'

如果免密登录成功,教程到此为止。

如果ssh-copy-id命令不可用,可以手动将公钥内容追加到服务器的~/.ssh/authorized_keys文件中:

cat ~/.ssh/id_rsa.pub | ssh root@server_ip 'cat >> ~/.ssh/authorized_keys'

客户端开启SSH证书登录。

接着上面,用ssh远程登录如果还要求继续输入密码,判断服务端(S)是否已启用公钥认证。
SSH服务器的配置文件通常位于/etc/ssh/sshd_config。可以使用文本编辑器(如vim或nano)进行编辑:

sudo vim /etc/ssh/sshd_config

确认PubkeyAuthentication值为yes:

PubkeyAuthentication yes

修改后重启服务端sshd服务:

sudo systemctl restart sshd

可能遇到的问题

  1. linux免密登录配置出现缺少authorized_keys文件

    # 在~/.ssh/下建立authorized_keys文件,修改权限:
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
  2. ~/.ssh目录和~/.ssh/authorized_keys文件的权限异常

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

参考文章:

  1. SSH配置—Linux下实现免密码登录 - 听~雨 - 博客园
  2. linux设置ssh免密登录 - hanease - 博客园
THE END

标签: Linux SSH

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。


相关文章