CentOS配置SSH免密登录实现方式

SSH免密登录(基于公钥认证)是一种安全且便捷的远程登录方式,允许用户在不输入密码的情况下通过SSH连接到目标服务器。这种方式基于非对称加密技术,通过生成一对密钥(公钥和私钥),将公钥部署到目标服务器的授权文件中,从而实现免密登录。本文将详细介绍在CentOS系统上配置SSH免密登录的步骤、原理及常见问题解决方法。

图片[1]_CentOS配置SSH免密登录实现方式_知途无界

一、SSH免密登录的原理

SSH支持多种认证方式,包括密码认证公钥认证。免密登录主要依赖公钥认证机制,其核心原理如下:

  1. 密钥对生成​:用户在本地客户端生成一对密钥,包括:
    • 私钥(Private Key)​​:保存在客户端本地(如 ~/.ssh/id_rsa),必须严格保密,不可泄露。
    • 公钥(Public Key)​​:可公开分发,需部署到目标服务器的 ~/.ssh/authorized_keys 文件中。
  2. 认证流程​:
    • 当客户端尝试通过SSH连接服务器时,SSH客户端会向服务器发送本地私钥对应的公钥信息。
    • 服务器检查自己的 ~/.ssh/authorized_keys 文件中是否存在匹配的公钥。
    • 如果存在匹配的公钥,服务器会生成一个随机字符串,用该公钥加密后发送给客户端。
    • 客户端使用本地私钥解密该字符串,并将解密结果返回给服务器。
    • 服务器验证解密结果是否与原始随机字符串一致。若一致,则认证通过,允许登录;否则拒绝连接。

相比密码认证,公钥认证具有更高的安全性(避免密码暴力破解)和便捷性(无需重复输入密码),特别适合自动化运维、集群管理等场景。


二、配置SSH免密登录的步骤(以CentOS为例)

以下以本地客户端(client)​通过SSH免密登录目标服务器(server)​为例,详细说明配置流程。假设两台机器均为CentOS系统,且已安装SSH服务(默认已安装)。

步骤1:在本地客户端生成SSH密钥对

  1. 登录本地客户端​(如你的开发机或跳板机),打开终端。
  2. 执行密钥生成命令​:
    使用 ssh-keygen 工具生成RSA密钥对(默认类型,兼容性最好)。按回车键使用默认路径(~/.ssh/)和空密码(直接回车两次,不设置密钥密码): ssh-keygen -t rsa输出示例​: Generating public/private rsa key pair. Enter file in which to save the key (/home/youruser/.ssh/id_rsa): # 直接回车,默认路径 Created directory '/home/youruser/.ssh'. Enter passphrase (empty for no passphrase): # 直接回车,不设置密钥密码 Enter same passphrase again: # 直接回车 Your identification has been saved in /home/youruser/.ssh/id_rsa. Your public key has been saved in /home/youruser/.ssh/id_rsa.pub. The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@client The keys randomart image is: +---[RSA 3072]----+ | .o.o. | | . +.*. | | . B + | | o * . | | . S . . | | . o o | | . . | | | +----[SHA256]-----+关键说明​:
    • 密钥路径​:默认生成的私钥为 ~/.ssh/id_rsa,公钥为 ~/.ssh/id_rsa.pub
    • 密钥密码(Passphrase)​​:若设置密钥密码,每次使用私钥时需输入密码(增加安全性但降低便捷性)。若希望完全免密,直接回车两次不设置。
  3. 验证密钥是否生成​:
    执行以下命令查看生成的密钥文件: ls -l ~/.ssh/正常输出应包含​: -rw------- 1 youruser youruser 2610 Mar 10 10:00 id_rsa # 私钥(权限600) -rw-r--r-- 1 youruser youruser 566 Mar 10 10:00 id_rsa.pub # 公钥(权限644)

步骤2:将公钥复制到目标服务器

将本地客户端的公钥(id_rsa.pub)内容追加到目标服务器的 ~/.ssh/authorized_keys 文件中。常用方法有两种:

方法1:使用 ssh-copy-id 工具(推荐,自动完成)

ssh-copy-id 是专为简化公钥部署设计的工具,自动将本地公钥追加到目标服务器的 authorized_keys 文件中,并设置正确的权限。

  1. 执行命令​:
    替换以下参数:
    • user:目标服务器的用户名(如 root 或自定义用户)。
    • server_ip:目标服务器的IP地址或域名(如 192.168.1.100)。
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip示例​(以用户 root 和服务器IP 192.168.1.100 为例): ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100
  2. 输入目标服务器密码​:
    首次连接时会提示输入目标服务器的用户密码(如 root 用户的密码),输入后公钥会自动复制并追加到目标服务器的 ~/.ssh/authorized_keys 文件中。
  3. 验证结果​:
    命令执行成功后,输出类似以下信息: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.100'" and check to make sure that only the key(s) you wanted were added.

方法2:手动复制公钥(适用于无 ssh-copy-id 的环境)

若目标服务器未安装 ssh-copy-id(如最小化安装的CentOS),可手动操作:

  1. 查看本地公钥内容​:
    执行以下命令复制公钥内容(选中输出并复制): cat ~/.ssh/id_rsa.pub输出示例​: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...(长字符串)... youruser@client
  2. 登录目标服务器​:
    使用密码登录目标服务器(首次需输入密码): ssh user@server_ip
  3. 创建或编辑 authorized_keys 文件​:
    • 切换到目标用户的主目录(如 root 用户为 /root/,普通用户为 /home/username/)。
    • 确保 .ssh 目录存在且权限为 700(仅所有者可读写执行): mkdir -p ~/.ssh # 如果目录不存在则创建 chmod 700 ~/.ssh # 设置权限
    • 将本地公钥内容追加到 ~/.ssh/authorized_keys 文件中(若文件不存在则新建): echo "粘贴复制的公钥内容" >> ~/.ssh/authorized_keys 或使用文本编辑器(如 vi)手动粘贴: vi ~/.ssh/authorized_keys 在文件中粘贴公钥内容后保存退出。
  4. 设置 authorized_keys 文件权限​:
    必须确保该文件的权限为 600(仅所有者可读写): chmod 600 ~/.ssh/authorized_keys

步骤3:测试免密登录

配置完成后,在本地客户端尝试通过SSH连接目标服务器,​无需输入密码​:

ssh user@server_ip

示例​:

ssh root@192.168.1.100

预期结果​:
直接登录到目标服务器的命令行界面,无密码提示。

若仍提示输入密码​:
请检查以下常见问题(见下文“常见问题解决”部分)。


三、常见问题解决

1. 仍提示输入密码

可能原因及解决方法:

  • 目标服务器未启用公钥认证​:
    检查目标服务器的SSH配置文件 /etc/ssh/sshd_config,确保以下参数已正确设置: PubkeyAuthentication yes # 启用公钥认证 AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径(默认通常已正确) PasswordAuthentication no # 可选:禁用密码认证(增强安全性,测试阶段建议保持yes) 修改后重启SSH服务: systemctl restart sshd
  • 文件权限问题​:
    目标服务器上以下文件和目录的权限必须严格符合要求:
    • ~/.ssh 目录权限:700drwx------)。
    • ~/.ssh/authorized_keys 文件权限:600-rw-------)。
    • 用户主目录权限:普通用户建议 755(如 /home/username),root 用户建议 750
    修复权限命令(在目标服务器上执行): chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 755 ~ # 普通用户主目录;root用户可设为750
  • 公钥未正确追加​:
    检查目标服务器的 ~/.ssh/authorized_keys 文件内容,确认本地公钥(id_rsa.pub)的完整内容已正确粘贴(无多余空格或换行符)。
  • SELinux限制(仅限CentOS/RHEL)​​:
    若目标服务器启用了SELinux,可能需要恢复 .ssh 目录的上下文: restorecon -Rv ~/.ssh

2. 如何配置多台服务器的免密登录?

重复步骤2,将本地客户端的公钥(id_rsa.pub)分别追加到每台目标服务器的 ~/.ssh/authorized_keys 文件中即可。若需管理多台服务器,可使用脚本批量操作(结合 ssh-copy-idansible 工具)。


3. 如何提高免密登录的安全性?

  • 为私钥设置密码​:生成密钥时通过 ssh-keygen 设置Passphrase(需首次使用时输入,可通过 ssh-agent 缓存密码)。
  • 限制目标服务器的访问IP​:在目标服务器的 /etc/ssh/sshd_config 中通过 AllowUsersAllowGroups 限制可登录的用户及IP。
  • 禁用密码认证​(测试无误后):在目标服务器的 /etc/ssh/sshd_config 中设置 PasswordAuthentication no,仅允许公钥认证。

四、总结

通过上述步骤,你可以在CentOS系统上轻松配置SSH免密登录,实现安全且高效的远程管理。核心要点包括:

  1. 生成密钥对​:使用 ssh-keygen 在本地客户端生成RSA密钥对。
  2. 部署公钥​:通过 ssh-copy-id 或手动方式将公钥追加到目标服务器的 authorized_keys 文件。
  3. 验证配置​:测试免密登录并排查常见问题(权限、配置文件参数)。

此方法广泛应用于自动化运维(如Ansible)、集群节点管理、开发测试环境等场景,能够显著提升工作效率并降低密码泄露风险。根据实际需求,可进一步扩展至多服务器管理或结合密钥密码增强安全性。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞81 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容