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 免密登录基于公钥认证机制:
在本地机器上生成一对 SSH 密钥:私钥(id_rsa) 和 公钥(id_rsa.pub)。
将公钥上传到目标服务器的 ~/.ssh/authorized_keys 文件中。
当你从本地登录目标服务器时,SSH 会使用本地私钥对数据进行签名,目标服务器用公钥验证签名。如果验证通过,则允许登录,无需输入密码。
二、配置 SSH 免密登录的步骤
假设:
本地机器:你的电脑(如 macOS、Windows 或 Linux)。
目标服务器:你的云服务器(如阿里云、腾讯云、华为云等)。
我们将从本地机器向目标服务器配置免密登录。
1. 在本地机器上生成 SSH 密钥对
在本地终端运行以下命令:
ssh-keygen -t rsa -b 4096
参数说明:
-t rsa:指定密钥类型为 RSA(也可以选择 ed25519,更安全且高效)。
-b 4096:指定密钥长度为 4096 位(默认是 3072 位,4096 更安全)。
执行命令后,系统会提示:
保存密钥的位置:默认是 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。可以直接按回车使用默认路径。
设置密钥密码(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,或者你更喜欢手动操作,可以按以下步骤操作:
查看本地公钥内容:
cat ~/.ssh/id_rsa.pub
复制输出的公钥内容(以 ssh-rsa 开头的一长串字符串)。
登录目标服务器:
ssh 用户名@目标服务器IP
在目标服务器上,编辑或创建 ~/.ssh/authorized_keys 文件:
mkdir -p ~/.ssh # 如果 .ssh 目录不存在,则创建
chmod 700 ~/.ssh # 设置 .ssh 目录权限为 700(必须)
vi ~/.ssh/authorized_keys
将刚才复制的公钥内容粘贴到 authorized_keys 文件中(每行一个公钥),保存并退出。
设置 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)
是否有多台服务器需要配置
我可以提供更具体的指导。