ssh公钥远程登录服务器配置,实现无密码登录

目标:

通过 SSH 密钥对实现从 master 节点到 slave1 节点的免密码登录。


步骤 1:在 master 节点生成 SSH 密钥对

  1. master 节点上打开终端,执行以下命令生成 SSH 密钥对:
    ssh-keygen
    • 会提示你指定密钥的保存路径,默认路径是 ~/.ssh/id_rsa,如果没特殊要求,直接按 Enter 键即可。
    • 如果你不想设置密码保护私钥,可以在设置密码时按回车跳过。这样在一些环境下会更方便。

    运行后,master 节点会生成两对密钥:

    • 公钥:~/.ssh/id_rsa.pub
    • 私钥:~/.ssh/id_rsa

    你可以通过以下命令查看公钥:

    cat ~/.ssh/id_rsa.pub

步骤 2:将公钥复制到 slave1

方式 1:使用 ssh-copy-id 命令(推荐)

  1. 如果 root 用户已启用,使用 ssh-copy-id 命令将公钥复制到 slave1
    ssh-copy-id root@[slave1_ip]
    • 如果 root 用户启用且允许 SSH 登录,ssh-copy-id 会自动将 master 上的公钥添加到 slave1~/.ssh/authorized_keys 文件,并设置正确的权限。
  2. 完成后,返回 master 节点,尝试 SSH 登录到 slave1
    ssh root@[slave1_ip]

    如果一切正常,应该可以免密码使用 root 登录到 slave1

方式 2:手动将公钥添加到 slave1

如果 root 用户未启用或无法使用 ssh-copy-id,可以手动操作:

  1. master 节点查看并复制公钥:
    cat ~/.ssh/id_rsa.pub
  2. 登录到 slave1
    ssh [用户名]@[slave1_ip]
  3. slave1 上,打开 ~/.ssh/authorized_keys 文件:
    vi ~/.ssh/authorized_keys
    • 如果 ~/.ssh 目录不存在,需要先创建:
      mkdir -p ~/.ssh
      chmod 700 ~/.ssh
  4. master 节点的公钥粘贴到 authorized_keys 文件中,确保没有其他无关内容干扰。
  5. 保存并退出 vi 编辑器:按 Esc 键,然后输入 :wq 保存并退出。
  6. 修改 authorized_keys 文件权限,确保只有用户自己能读取:
    chmod 600 ~/.ssh/authorized_keys
  7. 返回 master 节点,尝试 SSH 登录到 slave1
    ssh [用户名]@[slave1_ip]

    如果能够成功登录,说明密钥对配置成功。


步骤 3:检查并调整权限

确保 slave1 上的 .ssh 目录和 authorized_keys 文件权限正确,防止其他用户修改文件,导致安全漏洞。

  1. 确保 .ssh 目录的权限是 700,只有用户本身有读写权限:
    chmod 700 ~/.ssh
  2. 确保 authorized_keys 文件的权限是 600,只有用户本身有读取权限:
    chmod 600 ~/.ssh/authorized_keys
  3. 确保 .ssh 目录没有写权限给用户组:
    chmod g-w ~/.ssh

步骤 4:确认无密码登录

完成以上配置后,从 master 节点上测试是否能够免密码登录 slave1。运行以下命令:

ssh [用户名]@[slave1_ip]

如果能够直接登录,而不要求输入密码,则说明 SSH 密钥对配置成功。


步骤 5:退出 slave1 节点并回到 master

slave1 节点上验证成功登录后,退出 slave1 节点,返回 master 节点:

exit

步骤 6:配置 SSH 快捷命令(可选)

为了避免每次输入用户名和 IP 地址,可以在 master 节点上配置 SSH 快捷命令:

  1. 打开或创建 ~/.ssh/config 文件:
    vi ~/.ssh/config
  2. 添加以下内容:
    Host slave1
     Hostname 192.168.xxx.xxx  # slave1 的 IP 地址
     Port 22                  # SSH 端口
     User root                # 登录用户名
  3. 保存并退出编辑器。现在你可以通过以下命令直接使用 root 登录:
    ssh slave1

小贴士

  • 确保 root 用户的 SSH 登录权限已启用(如果使用 root 登录)。在 /etc/ssh/sshd_config 文件中,检查以下配置:
    PermitRootLogin yes

    如果该项被禁用(no),需要手动启用 root 登录权限。
    如果该项不存在,则需手动添加。

  • 如果你希望从 master 节点到 slave1 节点实现无密码登录某个特定用户,只需要确保在 master 节点上生成的 SSH 密钥对被正确传递到 slave1 上的该用户的 ~/.ssh/authorized_keys 文件中。

总结

通过上述步骤,你可以在 master 节点和 slave1 节点之间实现 SSH 密钥对的免密码登录,并且通过配置快捷命令使得登录更加便捷。确保权限设置正确,避免安全漏洞。