腾讯云 Linux 服务器配置 SSH 密钥登录:Windows 生成密钥、创建用户与免密 sudo 完整教程
Windows 生成密钥、创建用户与免密 sudo 完整教程
本文介绍如何在 Windows 上生成 SSH 密钥,为腾讯云 Linux 服务器创建独立用户、配置免密 sudo,并通过腾讯云控制台绑定密钥完成登录。
本文以用户 text 、服务器 192.168.0.1 为例。实际操作时,请替换为自己的 Linux 用户名和服务器 IP 地址。
1. 私钥和公钥的原理
SSH 密钥由一对相互关联的文件组成:
私钥
:保存在自己的电脑中,是必须严格保密的登录凭证。
公钥
:可以公开,保存在需要登录的服务器中。
密钥对
:私钥和公钥在数学上互相关联,但具有单向性。
1.1 为什么公钥和私钥可以用于登录
生成密钥时,计算机会先生成一个随机且难以猜测的私钥,然后根据私钥计算出对应的公钥。
这个计算过程具有以下特点:
私钥 → 可以计算出公钥
公钥 → 无法在现实可行的时间内反推出私钥
因此,将公钥放到服务器上不会暴露私钥。即使别人获得了公钥,也不能仅凭公钥生成可以登录服务器的私钥。
SSH 登录并不是把私钥发送给服务器,而是采用“签名与验证”的方式证明身份。
登录过程大致如下:
1. 用户在 Windows 上发起 SSH 连接。 2. 用户告诉服务器自己准备使用哪一把公钥。 3. 服务器检查该用户是否保存了这把公钥。 4. SSH 客户端使用本地私钥对本次连接的信息进行数字签名。 5. 客户端只把签名结果发送给服务器,不发送私钥。 6. 服务器使用已经保存的公钥验证签名。 7. 验证成功,说明客户端确实持有对应私钥,服务器允许登录。
整个过程中,私钥始终保留在用户自己的 Windows 电脑中。
可以把它理解为:
私钥:只能由本人使用的印章
公钥:服务器保存的验章工具
签名:本次登录产生的印章痕迹
服务器只能判断签名是否正确,无法通过公钥或签名复制出私钥。
1.2 腾讯云在其中做了什么
通过腾讯云控制台绑定 SSH 密钥时,上传的是公钥,不是私钥。
腾讯云的自动化服务会把公钥写入指定 Linux 用户的文件:
/home/text/.ssh/authorized_keys
以后使用 text 登录时,SSH 服务会读取这个文件中的公钥,并验证客户端是否持有对应私钥。
整个关系如下:
Windows 电脑
└─ 私钥:C:\Users\你的用户名\.ssh\key_text
│
│ 发起签名验证
▼
腾讯云 Linux 服务器
└─ 公钥:/home/text/.ssh/authorized_keys
这种方式更加安全,主要因为:
私钥不会上传腾讯云或服务器。
私钥不会在登录过程中通过网络传输。
公钥即使泄露,也很难反推出私钥。
服务器不需要保存用户登录密码。
可以为每位维护人员分配独立密钥。
某人的权限需要取消时,只需删除对应公钥。
但是,如果私钥文件被别人获取,对方就可能冒充该用户登录。因此,私钥仍然必须像重要密码一样妥善保管。
1.3 公钥的格式
常见的公钥如下:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... text@server
其中:
ssh-ed25519 是密钥算法。
中间的长字符串是公钥主体。
最后的 text@server 是备注,用来辨认密钥。
向腾讯云导入时,建议复制完整一行,包括最后的备注。
【截图 1:私钥、公钥、腾讯云和 Linux 服务器之间的关系】
2. 在 Windows 上生成密钥
打开 PowerShell,执行:
ssh-keygen -t ed25519 -a 100 `
-f "$env:USERPROFILE\.ssh\key_text" `
-C "text@server"
执行过程中会询问是否设置私钥密码:
设置密码更安全,但使用私钥时需要输入密码。
直接按两次回车,则生成无密码私钥,使用方便,但必须更加谨慎地保管。
生成的文件位于:
私钥:C:\Users\你的用户名\.ssh\key_text
公钥:C:\Users\你的用户名\.ssh\key_text.pub
查看公钥:
Get-Content "$env:USERPROFILE\.ssh\key_text.pub"
图片
私钥文件不要上传腾讯云、GitHub、网盘,也尽量不要给任何人。腾讯云需要的是 .pub 公钥内容。
3. 在服务器创建 Linux 用户
先使用已有管理员账号进入服务器,然后切换到 root:
sudo -i
设置准备创建的用户名:
NEW_USER=text
创建用户并指定 Bash:
useradd --create-home --shell /bin/bash "$NEW_USER"
创建 SSH 配置目录:
install -d \
-m 700 \
-o "$NEW_USER" \
-g "$NEW_USER" \
"/home/$NEW_USER/.ssh"
将用户加入 wheel 管理员组:
usermod -aG wheel "$NEW_USER"
配置无需密码的 sudo:
printf '%s\n' "$NEW_USER ALL=(ALL:ALL) NOPASSWD: ALL" \
> "/etc/sudoers.d/$NEW_USER"
chown root:root "/etc/sudoers.d/$NEW_USER"
chmod 440 "/etc/sudoers.d/$NEW_USER"
检查 sudo 配置:
visudo -cf "/etc/sudoers.d/$NEW_USER"
验证用户:
id "$NEW_USER"
sudo -l -U "$NEW_USER"
sudo -u "$NEW_USER" sudo -n whoami
最后一条命令应输出:
root
NOPASSWD: ALL 基本等同于授予完整 root 权限,只能提供给可信任的维护人员。
图片
4. 在腾讯云添加并绑定 SSH 密钥
进入腾讯云控制台,找到对应服务器所属产品的
SSH 密钥
页面。
腾讯云轻量应用服务器通常支持在线绑定和离线绑定。生产服务器优先使用在线绑定,避免因关机中断业务。
4.1 导入公钥
1. 点击“创建密钥”。 2. 选择“导入已有公钥”。 3. 输入便于识别的密钥名称,例如:
key_text
1. 在公钥输入框粘贴以下命令显示的完整内容:
Get-Content "$env:USERPROFILE\.ssh\key_text.pub"
1. 确认创建。
腾讯云只需要公钥,不需要也不应该上传私钥。
图片
4.2 绑定到服务器
1. 在 SSH 密钥列表中找到 key_text 。 2. 点击“绑定实例”。 3. 选择目标云服务器。 4. 优先选择“在线绑定”。 5. 用户名选择“指定用户名”。 6. 输入:
text
1. 点击确认,等待绑定完成。
用户名必须与服务器中创建的 Linux 用户完全一致,大小写也必须一致。
在线绑定通常要求:
云服务器处于运行状态。
腾讯云自动化助手处于运行状态。
Linux 用户已经提前创建。
用户的 Home 目录和.ssh 目录权限正确。
如果使用离线绑定,腾讯云可能会关闭或重启服务器。生产环境应提前安排维护时间。
图片
5. 测试登录
回到 Windows PowerShell,执行:
ssh -o IdentitiesOnly=yes `
-i "$env:USERPROFILE\.ssh\key_text" `
text@192.168.0.1
192.168.0.1 是本文使用的示例地址。通过互联网连接腾讯云时,通常应替换为服务器的公网 IP。
首次连接时可能出现服务器指纹提示:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
确认 IP 和服务器正确后输入:
yes
登录后检查当前用户:
whoami
hostname
预期结果类似:
text
服务器主机名
验证免密 sudo:
sudo -n whoami
预期输出:
root
测试完成后退出:
exit
图片
6. 常见问题
6.1 登录时仍然要求密码
这通常表示公钥没有正确绑定到对应用户。检查:
SSH 命令中的用户名是否正确。
是否选择了正确的私钥。
腾讯云绑定时填写的用户名是否正确。
公钥是否绑定到了目标实例。
实例的 22 端口是否已在安全组中开放。
6.2 提示
Permission denied (publickey) 使用调试模式查看详细信息:
ssh -vvv -o IdentitiesOnly=yes `
-i "$env:USERPROFILE\.ssh\key_text" `
text@192.168.0.1
检查服务器目录权限:
sudo chmod 700 /home/text
sudo chmod 700 /home/text/.ssh
sudo chmod 600 /home/text/.ssh/authorized_keys
sudo chown -R text:text /home/text/.ssh
6.3 绑定后旧密钥无法登录
不同腾讯云产品和绑定方式对旧密钥的处理可能不同。更换密钥时应遵循:
1. 保持现有管理员会话不要退出。 2. 创建并绑定新密钥。 3. 使用新私钥成功登录。 4. 验证 sudo 正常。 5. 最后再解绑或删除旧密钥。
不要在新密钥尚未验证时删除唯一可用的旧密钥。
7. 安全建议
每名维护人员使用独立 Linux 用户和独立密钥。
不要多人共用 root 私钥。
私钥泄露后立即解绑并更换。
定期清理离职人员的账号、公钥和 sudo 权限。
腾讯云控制台账号应开启多因素认证。
公网 SSH 尽量限制来源 IP。
保留至少一种经过验证的应急登录方式。
不要把私钥放进项目仓库。
删除旧密钥前,必须先确认新密钥能够登录。
参考资料
腾讯云:管理 SSH 密钥
腾讯云:使用 SSH 登录 Linux 实例
腾讯云轻量应用服务器:管理密钥粗体