我为什么要创建和使用 SSH 密钥?
在云环境和国际数据中心中,安全自动登录服务器是每个 DevOps 操作、Web 托管、渲染、AI 和数据库管理的基础。. SSH密钥 它们是一种标准、安全且可编写脚本的身份验证方法,可以取代弱密码。.
使用公钥/私钥可以降低暴力破解攻击的风险,更容易实现自动化和更细粒度的访问控制。.
先决条件和基本概念
私钥: 您的机密文件不应泄露。.
公钥: 放置在服务器上的文件(authorized_keys)。.
常用算法: ed25519 (受到推崇的), rsa 4096.
路线: ~/.ssh/id_* 在 Linux/WSL 上 C:\Users\ .ssh 在Windows系统上。.
访问权限: chmod 700 ~/.ssh 和 chmod 600 私钥。.
在 Linux/macOS/WSL 上创建 SSH 密钥
建议 ed25519 除非出于兼容性原因需要使用 RSA,否则请勿使用。.
在 Shell 中生成和管理密钥的步骤
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519 -o -a 100
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/id_rsa -o -a 100
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ls -la ~/.ssh
cat ~/.ssh/id_ed25519.pub
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 [email protected]
chmod 400 my-aws-key.pem
ssh -i my-aws-key.pem [email protected]注意:在 AWS 中,您通常在启动实例时选择或导入密钥。如果您有 PEM 文件,请使用该文件作为身份标识。.
在 Windows 系统中创建 SSH 密钥(PowerShell / Windows OpenSSH)
Windows 10/11 有 OpenSSH 客户端;您也可以使用 PuTTY/Puttygen 通过 PuTTY 连接。.
PowerShell 命令
ssh-keygen -t ed25519 -C "[email protected]" -f $env:USERPROFILE\.ssh\id_ed25519
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519文件路径:
C:\Users\ .ssh id_ed25519C:\Users\ .ssh id_ed25519.pub
使用 PuTTYgen 将 PEM 转换为 PPK
一般步骤:
打开 PuTTYgen。.
文件 > 加载私钥和文件
my-aws-key.pem加载(显示所有文件)。.保存私钥
my-aws-key.ppk然后使用 PuTTY(连接 > SSH > 身份验证 > 私钥文件)。.
在 AWS EC2 和其他云面板中导入公钥
AWS 控制台: EC2 > 密钥对 > 导入密钥对. 文件名和内容 .pub 进入。.
创建实例时,您可以选择现有的密钥对。其他数据中心通常会在控制面板中提供上传/导入 SSH 密钥的选项。.
cloud-init 添加公钥示例
#cloud-config
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]将密钥添加到 GitLab/GitHub 并在 CI 中使用
对于 GitLab: 用户设置 > SSH 密钥 然后粘贴公钥。转到项目以部署密钥。.
在 CI/CD 中,将私钥作为受保护的变量上传,并通过创建一个具有受限访问权限的文件在作业中使用它(chmod 600).
密钥安装后的服务器和安全设置
步骤 1:设置权限。.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519然后是设置 /etc/ssh/sshd_config 检查并更新:
密码验证否
不允许RootLogin
公钥认证:是
你可以 允许用户 设置为限制用户。.
使用DNS 如果需要,可以更改端口。.
sudo systemctl restart sshd防火墙:
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 2222/tcp使用 Fail2ban 或 CrowdSec 来防止暴力破解:
sudo apt install fail2ban对于敏感服务器,请使用堡垒机/跳转机来限制对私有网络的直接访问。.
不同应用场景的实用技巧
交易者专用(用于交易的VPS)
选择地点: 靠近经纪商或交易所服务器,实现最低延迟。我们在全球拥有超过 85 个办事处,总能找到一个靠近您目标市场的地点。.
建议将 SSH 连接限制为仅使用静态 IP 地址或通过 VPN 连接:
sudo ufw allow from 203.0.113.5 to any port 22适用于游戏玩家(游戏VPS)
对于游戏服务器,应选择具有强大对等连接和完善的 CDN/BGP 服务的服务器位置。使用 SSH 密钥代替密码,并部署堡垒主机以减少攻击面。.
用于人工智能和渲染(GPU 云)
使用强密钥(ed25519/RSA4096)连接到 GPU 服务器,并为每个项目分配单独的用户和密钥。.
rsync -avz -e "ssh -i ~/.ssh/id_ed25519 -p 2222" /local/path user@remote:/remote/path用于托管和 GitLab 托管
使用具有有限访问权限的服务器特定密钥(部署密钥)自动访问服务器的私有存储库。.
关键管理、轮换和标准
定期轮换钥匙(例如每 6 至 12 个月一次)。.
从钥匙中取出旧钥匙
授权密钥删除云面板。.使用私钥的口令并将其存储在密码管理器中。.
在组织中,使用 SSH 证书和 CA 进行集中管理(OpenSSH CA)。.
其他提示和故障排除
遇到错误时 权限被拒绝(公钥) 检查公钥是否在文件中 ~/.ssh/authorized_keys 它存在,权限也正确。.
sudo journalctl -u sshd -e
sudo tail -f /var/log/auth.log如果您使用 ProxyJump 或跳转主机,则配置文件非常有用:
Host bastion
HostName bastion.example.com
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Host internal-*
ProxyJump bastion
User deploy
IdentityFile ~/.ssh/id_deploy从 服务器存活间隔 和 服务器存活计数最大值 在 SSH 配置中使用,可防止会话突然终止。.
最终安全建议
限制对特定 IP 地址的 SSH 访问、使用 VPN 或专用网络以及对敏感服务器使用反 DDoS 服务也是其他一些重要方面。.
摘要和建议清单
创建密钥: ed25519 带密码
文件保护:
chmod 700 ~/.ssh && chmod 600 private_key激活 SSH 代理并添加密钥
将公钥上传到 AWS 控制面板或数据中心,或者使用 cloud-init。
禁用密码验证和允许Root登录
防火墙/UFW 和 Fail2ban 或 CrowdSec
使用堡垒机、IP限制和VPN进行敏感访问
常规密钥复制和轮换









