TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:

TOP云总站云服务器:https://topyun.vip/server/buy.html

TOP云C站云服务器:https://c.topyun.vip/cart

在云服务器上配置 SSH 免密登录(即基于公钥认证的 SSH 登录)是一种安全且高效的方式,可以避免每次登录时都需要输入密码。它通过生成一对 SSH 密钥(公钥 + 私钥),将公钥部署到目标服务器上,从而实现免密登录。


一、SSH 免密登录的原理

SSH 免密登录基于公钥认证机制

  1. 在本地机器上生成一对 SSH 密钥:私钥(id_rsa) 和 公钥(id_rsa.pub)

  2. 将公钥上传到目标服务器的 ~/.ssh/authorized_keys 文件中。

  3. 当你从本地登录目标服务器时,SSH 会使用本地私钥对数据进行签名,目标服务器用公钥验证签名。如果验证通过,则允许登录,无需输入密码。


二、配置 SSH 免密登录的步骤

假设:

  • 本地机器:你的电脑(如 macOS、Windows 或 Linux)。

  • 目标服务器:你的云服务器(如阿里云、腾讯云、华为云等)。

我们将从本地机器向目标服务器配置免密登录。


1. 在本地机器上生成 SSH 密钥对

在本地终端运行以下命令:

ssh-keygen -t rsa -b 4096

参数说明:

  • -t rsa:指定密钥类型为 RSA(也可以选择 ed25519,更安全且高效)。

  • -b 4096:指定密钥长度为 4096 位(默认是 3072 位,4096 更安全)。

执行命令后,系统会提示:

  1. 保存密钥的位置:默认是 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。可以直接按回车使用默认路径。

  2. 设置密钥密码(passphrase):可以设置一个密码用于保护私钥,也可以直接按回车不设置(免密码保护)。

生成完成后,你可以在 ~/.ssh/ 目录下看到两个文件:

  • id_rsa:私钥(务必妥善保管,不要泄露)。

  • id_rsa.pub:公钥(可以公开)。


2. 将本地公钥上传到目标服务器

有两种方式可以将公钥上传到目标服务器:

方法一:使用 ssh-copy-id(推荐,简单方便)

如果你的本地机器是 Linux 或 macOS,可以直接使用 ssh-copy-id 命令将公钥上传到目标服务器。

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@目标服务器IP

参数说明:

  • -i ~/.ssh/id_rsa.pub:指定要上传的公钥文件路径(默认是 ~/.ssh/id_rsa.pub,可以省略 -i)。

  • 用户名@目标服务器IP:目标服务器的登录用户名和 IP 地址。

执行命令后,系统会提示输入目标服务器的密码。输入密码后,ssh-copy-id 会自动将公钥追加到目标服务器的 ~/.ssh/authorized_keys 文件中。

方法二:手动复制公钥(适用于所有系统,包括 Windows)

如果你的本地机器是 Windows,或者你更喜欢手动操作,可以按以下步骤操作:

  1. 查看本地公钥内容:

cat ~/.ssh/id_rsa.pub

复制输出的公钥内容(以 ssh-rsa 开头的一长串字符串)。

  1. 登录目标服务器:

ssh 用户名@目标服务器IP
  1. 在目标服务器上,编辑或创建 ~/.ssh/authorized_keys 文件:

mkdir -p ~/.ssh  # 如果 .ssh 目录不存在,则创建
chmod 700 ~/.ssh # 设置 .ssh 目录权限为 700(必须)
vi ~/.ssh/authorized_keys

将刚才复制的公钥内容粘贴到 authorized_keys 文件中(每行一个公钥),保存并退出。

  1. 设置 authorized_keys 文件的权限:

chmod 600 ~/.ssh/authorized_keys

⚠️ 注意:

  • ~/.ssh 目录权限必须是 700。

  • ~/.ssh/authorized_keys 文件权限必须是 600。
    如果权限不对,SSH 会拒绝使用公钥认证。


3. 测试免密登录

从本地机器尝试登录目标服务器:

ssh 用户名@目标服务器IP

如果配置成功,你将直接登录到目标服务器,而无需输入密码。


三、配置多台服务器的免密登录

如果你需要从本地机器免密登录到多台服务器,可以重复上述步骤,将相同的公钥上传到每一台目标服务器的 ~/.ssh/authorized_keys 文件中。

或者,你可以为不同的服务器配置不同的密钥对,以增强安全性。


四、高级配置(可选)

1. 使用 SSH 配置文件简化登录

为了更方便地登录不同的服务器,可以在本地机器上配置 SSH 的配置文件 ~/.ssh/config。

创建或编辑配置文件:

vi ~/.ssh/config

添加如下内容(以示例服务器为例):

Host myserver
    HostName 123.123.123.123  # 目标服务器 IP 或域名
    User root                 # 登录用户名
    Port 22                   # SSH 端口(默认是 22)
    IdentityFile ~/.ssh/id_rsa # 指定使用的私钥文件

参数说明:

  • Host myserver:定义一个别名 myserver,以后可以用这个别名代替 IP 地址登录。

  • HostName:目标服务器的 IP 地址或域名。

  • User:登录用户名。

  • Port:SSH 端口(默认是 22,如果修改过 SSH 端口,请填写实际端口)。

  • IdentityFile:指定使用的私钥文件路径。

使用配置文件登录:

ssh myserver

SSH 会自动读取配置文件中的信息,使用指定的私钥登录目标服务器。


2. 禁用密码登录(增强安全性)

配置好免密登录后,为了提高安全性,可以禁用目标服务器上的密码登录,只允许公钥认证。

编辑目标服务器的 SSH 配置文件:

sudo vi /etc/ssh/sshd_config

找到并修改以下配置项:

PasswordAuthentication no       # 禁用密码登录
PubkeyAuthentication yes        # 启用公钥认证

如果 PasswordAuthentication 不存在,可以直接添加。

保存后重启 SSH 服务:

sudo systemctl restart sshd     # CentOS/RHEL
sudo systemctl restart ssh      # Ubuntu/Debian

⚠️ 注意:

  • 在禁用密码登录之前,请确保免密登录已经配置成功,否则可能会导致你无法登录服务器!

  • 如果你有多个用户需要登录,确保他们的公钥都已正确配置。


五、常见问题排查

1. 免密登录失败,仍然提示输入密码

可能原因及解决方法:

  • 目标服务器上的 ~/.ssh/authorized_keys 文件权限不正确

    • 确保文件权限为 600:chmod 600 ~/.ssh/authorized_keys

    • 确保 .ssh 目录权限为 700:chmod 700 ~/.ssh

  • 本地私钥权限不正确

    • 确保私钥文件权限为 600:chmod 600 ~/.ssh/id_rsa

  • SSH 配置未启用公钥认证

    • 检查目标服务器的 /etc/ssh/sshd_config 文件,确保以下配置项正确:

      PubkeyAuthentication yes
  • 公钥未正确添加到 authorized_keys 文件

    • 确保公钥内容完整且正确地粘贴到了 ~/.ssh/authorized_keys 文件中。

  • SELinux 限制(仅限 CentOS/RHEL)

    • 如果启用了 SELinux,可能会导致权限问题。可以尝试临时关闭 SELinux 测试:

      sudo setenforce 0
    • 如果问题解决,可以通过以下命令永久禁用 SELinux(不推荐):

      sudo vi /etc/selinux/config

      将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启服务器。


2. 连接被拒绝或超时

  • 检查目标服务器的 SSH 服务是否正常运行:

sudo systemctl status sshd      # CentOS/RHEL
sudo systemctl status ssh       # Ubuntu/Debian
  • 检查防火墙和安全组是否开放了 SSH 端口(默认是 22):

sudo firewall-cmd --list-ports  # CentOS(firewalld)
sudo ufw status                 # Ubuntu(ufw)
  • 如果你修改了 SSH 端口,请确保在连接时指定正确的端口:

ssh -p 端口号 用户名@目标服务器IP

如果你告诉我你使用的:

  • 本地操作系统(如 Windows、macOS、Linux)

  • 目标服务器操作系统(如 CentOS 7、Ubuntu 20.04)

  • 是否有多台服务器需要配置

我可以提供更具体的指导。


不容错过
Powered By TOPYUN 云产品资讯