业务背景:现有两个机器;A(192.168.1.10)、B(192.168.1.20);
需要机器A可以免密登录B,具体操作如下:
1、首先在机器A中,上生成 SSH 密钥对(公钥和私钥)
生成不带密码的密钥对(彻底免输入),(通常在内网测试时可以接受),可以重新生成一个没有 passphrase 的密钥对
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
-
-N ""
表示不设置密码 -
-f ~/.ssh/id_rsa 表示文件位置
-t rsa
:指定密钥类型为 RSA。-b 4096
:指定密钥长度为 4096 位(更安全)。-C "test"
:添加注释(可选)。
生成的默认位置是:/root/.ssh
- 默认情况下,密钥会保存在
~/.ssh/id_rsa
(私钥)和~/.ssh/id_rsa.pub
(公钥)。
当然在生成的时候也可以按照提示指定具体的位置。
其中 id_rsa 和 id_rsa.pub 是私钥和公钥;
2、把公钥放到B机器中
在A机器中使用如下命令,把公钥放到B中
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.20
或:ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.1.20
-
username
是 B 上的目标用户,比如ubuntu
或root
-
输入 B 的密码完成授权
这条命令会将 A 的公钥添加到 B 的 ~/.ssh/authorized_keys
文件中。
然后就可以远程免密连接了
ssh root@192.168.1.20
至此就可以进行其他相关操作了。若是都✅正常正确,则不用继续看👀以下内容。
3、其他注意事项,或可能出现的问题
1️⃣无法远程放置公钥(如果 ssh-copy-id 不可用,也可以手动复制公钥)
💡:手动移动,然后授权,添加公钥内容
chmod 644 ~/.ssh/id_rsa.pub
添加公钥内容
cat id_rsa.pub >> authorized_keys
授权
chmod 600 authorized_keys
2️⃣确保密钥生效
💡:查看B机器权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
💡:在 B 上查看 /etc/ssh/sshd_config配置
cat /etc/ssh/sshd_config
查看如下内容:
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果是,则无需修改,反之修改。若是修改了,则需要重新加载配置:
sudo systemctl restart ssh
3️⃣其他报错提示
root@ubuntu-VMware-Virtual-Platform:~/.ssh# ssh root@192.168.1.20
/etc/ssh/ssh_config: line 47: Bad configuration option: permitrootlogin
/etc/ssh/ssh_config: terminating, 1 bad configuration options
问题分析
-
错误原因
SSH 客户端配置文件 (~/.ssh/config
) 不支持permitrootlogin
选项。这个选项属于 SSH 服务端的配置(通常是/etc/ssh/sshd_config
)。因此,将此选项写入客户端配置文件会导致解析错误。 -
定位问题位置
错误日志明确指出问题出在/etc/ssh/ssh_config
文件的第 47 行,表明该行包含了一个无效的配置项。
找到并删除或注释掉类似以下内容的行:
permitrootlogin yes
或者将其改为有效的客户端配置选项(例如 User、Port 等)。
保存并退出编辑器。
至此!就是可以正常的免密登录机器B了。