什么是 SSH 密钥认证
SSH 密钥认证用一对加密密钥对取代了你连接服务器时输入的密码:_私钥_保存在你自己的电脑上,_公钥_则放置在服务器上。当你连接时,二者会在数学上完成匹配,而无需通过网络传输任何机密信息。它既更便捷(无需输入密码),也远比密码安全——密码有可能被猜中或被暴力破解。
这是你启动 Skyline Cloud VPS 或云服务器后应当首先完成的事情。下面的步骤针对 Ubuntu 22.04 LTS 和 24.04 LTS,但只需做少量改动,它们几乎适用于任何 Linux 服务器。
前提条件
- 一台你已经能够通过 SSH 访问的服务器,并拥有一个具备
sudo权限的用户。在全新的 Skyline Cloud VPS 上,这通常是root,或你在开通时创建的某个用户。 - 你自己机器上的一个终端:macOS 或 Linux 上的 Terminal 应用,或 Windows 10/11 上的 PowerShell / Windows Terminal(OpenSSH 已内置)。
第 1 步 — 在本地机器上生成密钥对
在你自己的电脑上运行以下命令,而不是在服务器上运行:
ssh-keygen -t ed25519 -C "you@example.com"
我们使用 -t ed25519,因为 Ed25519 密钥现代、快速,且只需较短的密钥长度即可保证安全。-C 标志只是添加一条注释(你的邮箱),方便你日后辨认这把密钥。如果你必须支持某个不支持 Ed25519 的较旧系统,则改用一把强 RSA 密钥:
ssh-keygen -t rsa -b 4096 -C "you@example.com"
按 Enter 接受默认的文件位置(~/.ssh/id_ed25519)。当系统提示输入口令(passphrase)时,请设置一个强口令。该口令会在磁盘上对你的私钥进行加密,这样即使笔记本电脑被盗,也不会因此交出服务器的访问权限。如果你使用代理(第 5 步),每个会话只需输入一次。
这会创建两个文件:
| 文件 | 作用 | 是否可分享? |
|---|---|---|
~/.ssh/id_ed25519 |
私钥 | 绝不要分享 |
~/.ssh/id_ed25519.pub |
公钥 | 可安全地复制到服务器 |
第 2 步 — 将公钥复制到服务器
最简单的方法是使用 ssh-copy-id,它会把你的公钥追加到服务器的 ~/.ssh/authorized_keys 中,并为你修正好权限:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
系统会最后一次要求你输入密码。请将 user 替换为你的服务器用户名(例如 root 或 ubuntu),将 your_server_ip 替换为你的 VPS IP 地址。
如果没有 ssh-copy-id
在 Windows 上,或者如果该工具缺失,请手动安装密钥。先显示公钥:
cat ~/.ssh/id_ed25519.pub
复制输出的那一行内容,用密码登录服务器,然后运行:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... you@example.com" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
请用你自己的密钥行替换上面示例中的内容。正确的权限至关重要:如果该文件或 ~/.ssh 目录的权限过于开放,SSH 会忽略 authorized_keys。
第 3 步 — 测试密钥登录
打开一个新的终端并连接:
ssh user@your_server_ip
如果你设置了口令,系统会提示你输入它(而不是服务器密码)。你应当会进入服务器的命令提示符。在执行下一步时请保持这个会话打开,这样即使出错也不会把你锁在门外。
第 4 步 — 禁用密码认证
一旦密钥登录正常工作,就关闭密码认证,让暴力破解尝试失去意义。在服务器上编辑 SSH 守护进程的配置文件:
sudo nano /etc/ssh/sshd_config
找到并设置以下几行(去掉行首的 #):
PasswordAuthentication no
PubkeyAuthentication yes
在 Ubuntu 22.04/24.04 上,还要检查嵌入式配置目录 /etc/ssh/sshd_config.d/——其中的某个文件(例如 50-cloud-init.conf)可能会覆盖主配置文件。确保没有任何文件设置了 PasswordAuthentication yes:
sudo grep -r PasswordAuthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
然后校验配置并重新加载服务:
sudo sshd -t
sudo systemctl restart ssh
在 Ubuntu 上该服务名为
ssh(ssh.service)。如果restart ssh报告找不到该单元,请改用sudo systemctl restart sshd。
现在打开另一个新终端,确认你仍然可以用密钥登录。只有在新会话成功之后,才关闭你原来的那个会话。
第 5 步 — 使用 SSH 代理(可选,但推荐)
为了避免每次连接都重新输入口令,每个会话只需把密钥加载到代理中一次:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
在 macOS 上,把它存入钥匙串(keychain),这样它在重启后仍然有效:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
第 6 步 — 整洁的 SSH 配置(可选)
在你本地机器的 ~/.ssh/config 中添加一个条目,这样你就可以用一个简短的别名来连接:
Host skyline-vps
HostName your_server_ip
User ubuntu
IdentityFile ~/.ssh/id_ed25519
现在只需 ssh skyline-vps 即可。
故障排查
- 完成第 2 步后仍被要求输入密码。 权限不正确。在服务器上运行
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys,并检查该文件属于你的用户。 Permission denied (publickey)。 服务器没有提供你的密钥,或者你把密钥复制到了错误用户的主目录中。加上-v查看 SSH 都尝试了什么:ssh -v user@your_server_ip。- 禁用密码后被锁在门外。 使用你的服务提供商的控制台(控制面板中基于网页的 VNC/串口控制台)登录,并临时重新启用
PasswordAuthentication。
在托管的、境内的 VPS 上运行
SSH 密钥保护的是连接本身,但服务器本身仍然需要打补丁、备份和监控。在 Skyline Cloud VPS 或云服务器上,你获得的硬件托管在沙特阿拉伯境内,满足 PDPL、NCA 和 SDAIA 的数据驻留要求,并提供本地阿拉伯语支持,以及为你处理操作系统加固和云备份的托管方案。再搭配同一境内平台上的企业邮箱托管,你的整套技术栈都能保持合规。
准备好在几分钟内部署一台安全的服务器了吗?立即创建你的 Skyline Cloud 账户并启动一台 VPS。

Comments
0 total · 0 threads