SSH 免密登录

SSH 免密登录
最新回答
奈何桥寂寞

2023-07-24 12:14:54

SSH免密登录的核心在于通过公钥-私钥认证机制替代密码验证。以下是详细实现步骤及关键注意事项:

一、基础免密登录配置(A→B)
  1. 在A机器生成密钥对

    ssh-keygen # 连续三次回车,默认生成密钥于/root/.ssh/

    生成文件:id_rsa(私钥)、id_rsa.pub(公钥)

  2. 将公钥传输至B机器

    方法1:使用ssh-copy-id(推荐)

    ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.1.105

    输入B机器的root密码后,公钥会自动追加到B的~/.ssh/authorized_keys。

    方法2:手动操作(适用于无ssh-copy-id环境)

    # 在A机器保存公钥到本地sz /root/.ssh/id_rsa.pub # 或使用scp传输# 在B机器操作mkdir -p ~/.ssh && chmod 700 ~/.sshtouch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keyscat id_rsa.pub >> ~/.ssh/authorized_keys
  3. 测试免密登录

    ssh -p 22 root@192.168.1.105

    若无需密码直接登录,则配置成功。

二、多机器免密登录(A→B/C/D)
  • 原理:将A的公钥(id_rsa.pub)分别添加到B、C、D的authorized_keys文件中。
  • 批量操作示例:for host in 192.168.1.105 192.168.1.106 192.168.1.107; do ssh-copy-id -i /root/.ssh/id_rsa.pub root@$hostdone
三、特殊场景处理
  1. 使用PEM密钥登录时

    若B机器通过PEM密钥登录(如AWS),ssh-copy-id可能失效。需手动将A的公钥追加到B的authorized_keys中(参考方法2)。

  2. 权限问题排查

    确保以下权限设置正确,否则免密可能失败:

    chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
  3. SELinux/防火墙干扰

    若连接被拒绝,检查B机器的SELinux和防火墙规则:

    setenforce 0 # 临时关闭SELinux(测试用)systemctl stop firewalld # 临时关闭防火墙(测试用)
四、关键点总结
  • 密钥分发方向:A的公钥需存在于所有目标机器(B/C/D)的authorized_keys中。
  • 文件权限:.ssh目录(700)、authorized_keys文件(600)权限必须严格设置。
  • 自动化工具:推荐使用ssh-copy-id简化流程,手动操作需注意路径和权限。

通过以上步骤,可实现从A机器到多台目标机器的免密SSH登录。如遇问题,可通过ssh -v root@host查看详细调试日志。