核心:基于 SSH 密钥认证 ,实现两台 / 多台 Linux 主机无需密码互相登录、执行远程命令,也就是常说的主机互信。
A机器被B机器信任,即A登陆B不需要密码,使用id_rsa及id_rsa.pub即可
在A机器执行:
bash
1、cd ~/.ssh
2、ssh-keygen -d
3、ssh-add id_rsa
系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了
下面有几个异常情况处理:
--如果系统提示:could not open a connection to your authentication agent
则需要执行一下命令:
ssh-agent bash
再执行 ssh-add id_rsa
bash
4、scp id_rsa.pub user@B:~
5、cat id_rsa.pub >> ~/.ssh/authorized_keys
注意:
.ssh 目录文件必须为 700 或 744
authorized_keys 文件权限为600
需要被信任系统用户 如work的目录 /home/work 必须为非777
常见问题 & 排错(高频坑)
1. 能 ping 通、密码能登,但免密失败
90% 是权限问题,按顺序检查:
bash
# 目录权限必须 700
ls -ld ~/.ssh
# 文件必须 600
ls -l ~/.ssh/authorized_keys
2. 提示 Permission denied, please try again
- 公钥未正确写入
authorized_keys - 目标主机
/etc/ssh/sshd_config未开启密钥认证
3. 检查 SSH 服务端配置
编辑 /etc/ssh/sshd_config,确保以下配置开启(注释去掉):
bash
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后重启 sshd:
bash
# CentOS/RHEL
systemctl restart sshd
# Ubuntu/Debian
systemctl restart ssh
4. 主机名 / IP 变化、known_hosts 冲突
首次登录会记录主机指纹到 ~/.ssh/known_hosts,IP / 主机名变更会报错:
bash
# 清空旧指纹
rm -f ~/.ssh/known_hosts
5. 禁用密码登录(安全加固,集群常用)
所有机器互信完成后,关闭密码登录,只允许密钥:
bash
# sshd_config
PasswordAuthentication no
重启 sshd 生效。
关键文件总结
| 文件 | 作用 | 建议权限 |
|---|---|---|
~/.ssh/ |
SSH 配置目录 | 700 |
id_rsa |
本地私钥(核心机密) | 600 |
id_rsa.pub |
本地公钥(可公开) | 644 |
authorized_keys |
存放远端所有信任主机公钥 | 600 |
known_hosts |
记录已连接主机指纹 | 644 |