Administrator
Administrator
发布于 2024-12-22 / 47 阅读
0
0

配置SSH免密登录

以下示例文章介绍了如何在 Linux 服务器(以 CentOS / Ubuntu 等常见发行版为例)上通过 SSH 密钥配置免密码登录。文中会包含完整的操作指令和说明,帮助你快速完成密钥下发并启用公钥认证。


一、前言

在日常运维或开发环境中,为了提高安全性以及简化登录流程,常常需要配置 SSH 免密登录。通过 SSH 密钥进行身份验证,可以避免在每次连接服务器时输入密码,同时也能有效地防止暴力破解等安全风险。

下面,我们将依次介绍如何生成 SSH 密钥、下发公钥到远程主机,以及如何在目标服务器上启用公钥认证并生效。


二、生成 SSH 密钥

在本地机器(一般是你的工作电脑或者跳板机)上执行以下命令,生成一对 RSA 公钥和私钥。

ssh-keygen -t rsa -b 4096 -C "ceph@cluster" -f ~/.ssh/id_rsa -N ""

参数解析:

  1. ssh-keygen:生成 SSH 密钥的命令行工具。
  2. -t rsa:指定密钥类型为 RSA。
  3. -b 4096:指定密钥长度为 4096 位。位数越大,加密强度也越高。
  4. -C "ceph@cluster":添加注释,方便标识此密钥。你可以自定义为自己的备注信息,如“user@hostname”。
  5. -f ~/.ssh/id_rsa:指定生成的私钥和公钥文件的保存位置,分别是 ~/.ssh/id_rsa~/.ssh/id_rsa.pub
  6. -N "":设置密钥密码为空,即不为此密钥设置 passphrase(如果你希望在使用私钥时还需要输入密码,可以去掉 -N "" 并在命令执行时输入一个复杂密码)。

执行完成后,你会在本地 ~/.ssh/ 目录下得到两个文件:

  • 私钥id_rsa
  • 公钥id_rsa.pub

三、下发公钥到远程服务器

要实现免密码登录,需要将本地的公钥(~/.ssh/id_rsa.pub)复制到远程服务器的 authorized_keys 中。可以使用以下命令完成自动复制:

ssh-copy-id root@1.1.1.1

参数解析:

  1. ssh-copy-id:自动将本地的公钥复制到远程服务器的 ~/.ssh/authorized_keys 文件中。
  2. root@1.1.1.1:表示连接远程服务器 1.1.1.1root 用户。实际使用时替换为目标服务器的 IP 和所需登录的用户名。

执行该命令后,会提示你输入远程服务器 root 用户的密码。输入正确后,公钥会被追加到远程服务器上。如果复制成功,下次登录就无需再输入密码。

如果你的系统中没有 ssh-copy-id 工具
可以使用手动方式复制公钥:

cat ~/.ssh/id_rsa.pub | ssh root@1.1.1.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

四、启用公钥认证

有些服务器默认可能没有启用公钥登录,需要在 SSH 配置文件 /etc/ssh/sshd_config 中启用。可以使用 sed 命令一键修改并使公钥认证生效,然后重启 SSH 服务。

sed -i '/^#*PubkeyAuthentication/s/.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config && systemctl restart sshd

参数解析:

  1. sed -i:直接在文件内修改,不输出到屏幕。
  2. '/^#*PubkeyAuthentication/s/.*/PubkeyAuthentication yes/':匹配被注释或没被注释的 PubkeyAuthentication 行,并替换为 PubkeyAuthentication yes
  3. /etc/ssh/sshd_config:SSH 服务配置文件。
  4. && systemctl restart sshd:只有在修改成功后才重启 SSH 服务,让修改立即生效。

五、测试免密码登录

完成以上步骤后,你可以从本地再次执行:

ssh root@1.1.1.1

如果之前一切配置正确,且本地私钥没有设置密码或已正确解锁,你将直接登录到远程服务器,而无需输入密码。


六、注意事项

  1. 安全性

    • 如果你没有给私钥设置 passphrase,那么任何能获取到你的私钥文件(id_rsa)的用户都可以随意使用它登录到对应的服务器。
    • 建议你妥善保管私钥,必要时可将其权限设置为 600 (chmod 600 ~/.ssh/id_rsa),并在需要时使用加密工具或安全存储来保存私钥。
  2. Root 登录限制

    • 部分服务器默认禁止 root 用户直接使用 SSH 登录。如果你的服务器已在 /etc/ssh/sshd_config 中禁用 PermitRootLogin yes,需要先启用(或使用非 root 用户 + sudo 的方式登录)。
  3. 防火墙和端口

    • 确保服务器的防火墙放行 SSH 所在端口(默认 22),若不是默认端口,可在连接时使用 ssh -p 自定义端口 user@host

七、结语

至此,你已经学会了如何生成 SSH 密钥、将公钥下发到远程服务器,以及在服务器端启用并生效公钥认证,实现 SSH 免密登录。
这一方法能有效提升安全性和效率,避免在每次登录时输入密码,也能减少密码泄露的风险。祝你在使用 SSH 时更加轻松和安全!


如有疑问或出现任何错误提示,可查看 ssh-copy-idssh-keygen 的帮助文档(通过 man ssh-copy-idman ssh-keygen 命令)。


评论