(っ●ω●)っ

配置多台 Linux 主机 SSH 免密登录

2025-11-27

实验环境

操作系统:Rocky Linux 9.6 x86_64

所有主机登录用户名:root,密码:Pass-1234

请确保所有主机均能访问 yum 软件源(网络源或者本地源均可)。

完整主机名 IP
linux1.skills.com 10.4.220.101
linux2.skills.com 10.4.220.102
linux3.skills.com 10.4.220.103
linux4.skills.com 10.4.220.104
linux5.skills.com 10.4.220.105
linux6.skills.com 10.4.220.106
linux7.skills.com 10.4.220.107

实操

以下所有操作都在 linux1.skills.com 上执行。

如果使用域名登录到其他主机,需要所有主机做好 DNS 域名解析或者修改 /etc/hosts,否则只使用 IP。

linux1 对其他主机免密

安装 expect 软件包:

1
yum -y install expect

/root 目录下,新建一个脚本,进入编辑模式(此处示例为 ssh-nopass.sh

1
vim ssh-nopass.sh

在脚本里写入以下内容:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa
for a in {1..7}; do expect <<EOF
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@linux$a.skills.com
expect "yes/no" {send yes\r}
expect "password" {send Pass-1234\r}
expect eof
EOF
done

编写完成后,使用以下命令执行脚本:

1
2
chmod +x ssh-nopass.sh
bash ssh-nopass.sh

脚本执行完成之后,如果没有意外,linux1 主机应该能访问其他主机了。

配置其他主机相互免密

刚刚的配置只能做到 linux1 免密访问其他主机,但此时其它主机不能互相免密访问。这一步是为了做到其他主机能够相互免密访问。

使用以下命令,让其它主机安装 expect 软件包、将脚本发送到其他主机、执行免密配置脚本:

1
2
3
for a in {2..7}; do scp ~/ssh-nopass.sh root@linux$a.skills.com:~; done #将脚本发送到其它主机
for a in {2..7}; do ssh root@linux$a.skills.com "yum -y install expect"; done #主机安装 expect 软件包
for a in {2..7}; do ssh root@linux$a.skills.com "chmod +x ~/ssh-nopass.sh && bash ~/ssh-nopass.sh"; done #其它主机执行免密脚本

执行完上面的指令之后,如无例外,所有的主机就能实现 SSH 免密访问。

注意事项

  1. 确保 /etc/ssh/sshd_config 配置允许 root 用户登录。
  2. 确保 DNS 能够正常解析至其他主机的 IP 地址。如果无法解析,请使用 IP 地址。
  3. 确保每台主机的 root 用户密码都相同,否则需要邪修下脚本。
  4. 确保所有主机能够使用 yum 安装软件包。