在 Linux 中如何以及为什么使用 ssh-copy-id 和 ssh-keygen 命令
Secure Shell (SSH) 是最广泛使用的用于安全管理和访问 远程系统 的工具之一。系统管理员通常不会依赖传统的基于密码的身份验证,因为这种方式安全性较低且容易受到暴力破解攻击,而是经常配置基于 SSH key 的身份验证,以获得更好的安全性、可扩展性和自动化。
本指南将说明如何使用 ssh-keygen 生成 SSH key,使用 ssh-copy-id 安全地将其复制到远程服务器,验证配置,并遵循安全最佳实践。
理解基于 SSH Key 的身份验证
使用 SSH key 时,身份验证通过一个 公钥-私钥对 完成:
- Private Key (id_rsa) → 保留在本地机器上,必须受到保护。
- Public Key (id_rsa.pub) → 放置在远程服务器的 ~/.ssh/authorized_keys 下。
- 连接时,SSH 使用公钥加密自动验证你的身份,而不会暴露密码。
这种方法 更安全 且 更方便,尤其适用于开发者、sysadmins 和自动化部署。
使用 ssh-keygen 生成 SSH Key
运行以下命令以生成一个 新的 SSH key 对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"选项说明:
- -t rsa → 指定加密算法(RSA)。
- -b 4096 → 使用 4096-bit key 以获得更强的加密(推荐)。
- -C → 添加一个 comment 来标识该 key,通常是你的邮箱或用户名。
交互提示:
保存 key 的文件 → 按 Enter 接受默认值:
~/.ssh/id_rsaPassphrase(可选但推荐) → 增加一层 额外的安全性。
如果设置了,在使用私钥时你需要输入它。
将 Public Key 复制到远程服务器(ssh-copy-id)
生成 key 后,使用 ssh-copy-id 将你的 public key 传输到远程服务器:
ssh-copy-id user@remote-server- user → 远程服务器上的用户名。
- remote-server → 远程机器的主机名或 IP address。
此命令:
将你的 public key (id_rsa.pub) 追加到服务器的:
~/.ssh/authorized_keys自动设置 .ssh 目录和 key 文件的 正确权限。
替代方法(手动设置)
如果 ssh-copy-id 不可用,你可以手动复制 key:
cat ~/.ssh/id_rsa.pub | ssh user@remote-server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"此命令:
- 如果缺失,则创建 .ssh 目录。
- 追加你的 public key。
- 设置 安全权限。
验证 SSH Key 身份验证
要确认一切正常:
ssh user@remote-server如果配置正确,你应该能够 无需输入密码即可登录。
如果设置了 passphrase,则会改为提示你输入它。
安全最佳实践
a) 使用强加密
优先使用 RSA 4096 或 Ed25519:
Ed25519 key 更小、更快且更安全。
b) 限制 Key 文件的权限
chmod 700 ~/.sshchmod 600 ~/.ssh/id_rsachmod 644 ~/.ssh/id_rsa.pub如果权限过于开放,SSH 将会 拒绝 使用这些 key。
c) 禁用密码身份验证(可选,推荐)
在远程服务器上,编辑:
sudo nano /etc/ssh/sshd_config设置:
PasswordAuthentication no
ChallengeResponseAuthentication noUsePAM yes然后重启 SSH:
sudo systemctl restart sshd) 使用 SSH Agent 管理 Passphrase
不要每次都输入 passphrase,改用 ssh-agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa这会在会话期间缓存你的 key。
常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 仍然要求输入密码 | 权限错误或缺少 key | 检查 ~/.ssh 权限和 authorized_keys |
| “Permission denied” 错误 | 用户名或 IP 错误 | 确认正确的登录凭据 |
| 找不到 ssh-copy-id | 缺少该工具 | 通过以下方式安装:sudo apt install openssh-client |
| Key 被忽略 | 文件权限过于宽松 | 运行 chmod 600 ~/.ssh/id_rsa |
结论
使用 ssh-keygen 和 ssh-copy-id 可在管理远程服务器时增强安全性和便利性。通过配置 SSH key 身份验证,管理员可以消除与基于密码登录相关的风险,同时简化安全访问。


