在两台 Linux 系统间配置 SSH 互信免密登录,可按以下步骤操作:
环境准备
假定有两台 Linux 主机,分别为 host1
和 host2
,需要在它们之间配置 SSH 互信。
操作步骤
1. 生成 SSH 密钥对
在 host1
和 host2
上分别执行以下命令,生成 SSH 密钥对:
ssh-keygen -t rsa
按提示操作,连续三次回车,默认在 ~/.ssh
目录下生成 id_rsa
(私钥)和 id_rsa.pub
(公钥)文件。
2. 复制公钥到对方主机
在 host1
上执行以下命令,将 host1
的公钥复制到 host2
:
ssh-copy-id user@host2
这里的 user
是 host2
上的用户名,host2
是 host2
的 IP 地址或主机名。执行该命令后,会提示输入 host2
的 user
用户密码,输入正确密码后,host1
的公钥就会被复制到 host2
的 ~/.ssh/authorized_keys
文件中。
同样,在 host2
上执行以下命令,将 host2
的公钥复制到 host1
:
ssh-copy-id user@host1
其中 user
是 host1
上的用户名,host1
是 host1
的 IP 地址或主机名。
3. 验证互信配置
在 host1
上执行以下命令,尝试免密登录 host2
:
ssh user@host2
若无需输入密码就可登录到 host2
,表明 host1
到 host2
的免密登录配置成功。
同样,在 host2
上执行以下命令,尝试免密登录 host1
:
ssh user@host1
若无需输入密码就可登录到 host1
,表明 host2
到 host1
的免密登录配置成功。
注意事项
- 确保两台主机的 SSH 服务都已启动,可使用
systemctl status sshd
命令查看 SSH 服务状态,若未启动,可使用systemctl start sshd
命令启动。 - 确保两台主机的防火墙允许 SSH 连接,默认情况下 SSH 使用 22 端口,可使用
firewall-cmd --zone=public --add-port=22/tcp --permanent
命令开放 22 端口,然后使用firewall-cmd --reload
命令重新加载防火墙规则。
在配置 SSH 互信免密登录时,需要确保 SSH 配置文件(通常为 /etc/ssh/sshd_config
)开启以下必要配置项,以下为你详细介绍:
必要配置项说明
1. PubkeyAuthentication
该配置项用于开启基于公钥的认证方式,只有开启此项,SSH 才能使用公钥进行身份验证。
PubkeyAuthentication yes
2. AuthorizedKeysFile
此配置项指定了存储用户授权公钥的文件路径,默认值为 .ssh/authorized_keys
,表示公钥存储在用户主目录下的 .ssh
文件夹中的 authorized_keys
文件里。
AuthorizedKeysFile .ssh/authorized_keys
3. PasswordAuthentication
虽然在配置免密登录时,通常不需要密码认证,但在调试或者特殊情况下可能需要使用密码登录,因此可以根据实际情况决定是否开启此项。如果要严格使用公钥认证,可以将其设置为 no
。
PasswordAuthentication no
4. PermitRootLogin
该配置项决定是否允许 root 用户通过 SSH 登录。出于安全考虑,建议将其设置为 no
,禁止 root 用户直接通过 SSH 登录。如果需要使用 root 权限,可以先以普通用户身份登录,再使用 sudo
命令提权。
PermitRootLogin no
配置文件修改步骤
- 备份配置文件:在修改配置文件之前,建议先备份原文件,以防修改过程中出现错误导致 SSH 服务无法正常使用。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- 编辑配置文件:使用文本编辑器(如
vim
或nano
)打开配置文件进行修改。
sudo vim /etc/ssh/sshd_config
-
修改配置项:找到上述配置项并修改其值,去掉前面的注释符号(
#
),如果配置项不存在,可以在文件中添加相应的行。 -
保存并退出:在
vim
编辑器中,按下Esc
键,输入:wq
保存并退出。 -
重启 SSH 服务:修改配置文件后,需要重启 SSH 服务使配置生效。
sudo systemctl restart sshd
注意事项
- 修改配置文件时,要确保语法正确,否则可能导致 SSH 服务无法启动。
- 配置修改完成后,建议在本地测试 SSH 连接,确保配置生效且可以正常登录。
- 如果使用防火墙,需要确保 SSH 端口(默认为 22)是开放的。