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
可能遇到的问题
linux免密登录配置出现缺少authorized_keys文件
# 在~/.ssh/下建立authorized_keys文件,修改权限: touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
~/.ssh目录和~/.ssh/authorized_keys文件的权限异常
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys