ssh-copy-id
将本地公钥复制到远程服务器的 authorized_keys 文件中,实现免密登录
语法
ssh-copy-id [options] [user@]hostname
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
-i |
指定要复制的公钥文件 | ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host |
常用 |
-p |
指定远程服务器端口 | ssh-copy-id -p 2222 user@host |
常用 |
-f |
强制模式,不检查密钥是否已存在 | ssh-copy-id -f -i ~/.ssh/key.pub user@host |
进阶 |
-n |
模拟运行,不实际复制 | ssh-copy-id -n user@host |
进阶 |
示例
复制默认公钥
ssh-copy-id user@192.168.1.100
自动选择 ~/.ssh/id_*.pub 中的公钥
复制指定公钥
ssh-copy-id -i ~/.ssh/work_key.pub deploy@server.com
多密钥时指定要复制哪个公钥
指定端口复制
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 root@host
SSH 端口非默认 22 时使用
手动复制公钥(无 ssh-copy-id 时)
cat ~/.ssh/id_ed25519.pub | ssh user@host 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
Windows 或某些系统没有 ssh-copy-id 时的替代方案
常见错误
/usr/bin/ssh-copy-id: ERROR: No identities found
没有找到公钥文件,先用 ssh-keygen 生成密钥对
Permission denied (publickey)
首次复制需要密码认证,确认服务器允许密码登录(PasswordAuthentication yes)
技巧
- 复制后测试:ssh user@host 应该不再需要密码
- 确保远程 ~/.ssh 目录权限为 700,authorized_keys 权限为 600
- 如果服务器禁用了密码登录,需要管理员手动添加公钥