在 Linux 中如何以及为什么使用 ssh-copy-id 和 ssh-keygen 命令

热门:
升级您的服务器配置! 申请 AVA 并使用 立减 15%
使用优惠码:

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_rsa

  • Passphrase(可选但推荐) → 增加一层 额外的安全性
    如果设置了,在使用私钥时你需要输入它。

将 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 4096Ed25519

    ssh-keygen -t ed25519 -C "your_email@example.com"
  • Ed25519 key 更小、更快且更安全

b) 限制 Key 文件的权限

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

如果权限过于开放,SSH 将会 拒绝 使用这些 key。

c) 禁用密码身份验证(可选,推荐)

在远程服务器上,编辑:

sudo nano /etc/ssh/sshd_config

设置:

PasswordAuthentication no

ChallengeResponseAuthentication no
UsePAM yes

然后重启 SSH:

sudo systemctl restart ssh

d) 使用 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 身份验证,管理员可以消除与基于密码登录相关的风险,同时简化安全访问。