ssh-copy-id工具的作用
你看到的 ssh-copy-id 本质上是一个——
👉 把“本机公钥”安全、正确地安装到远程服务器的工具
很多人第一次看到都会以为是:
“ssh copy?”
“是不是 scp 的某种变体?”
其实不是 😄
一句话解释(最重要)
ssh-copy-id= 自动把你的id_rsa.pub加到远端的~/.ssh/authorized_keys里
并且顺手把权限全都设置正确。
它到底帮你干了什么?
当你执行:
ssh-copy-id root@192.168.31.213
它会在后台自动完成👇
1️⃣ 读取你本机的公钥:
~/.ssh/id_rsa.pub
2️⃣ 用 密码方式 ssh 登录远端(最后一次要输密码)
3️⃣ 在远端做这些事(自动):
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
✅ 一步到位
✅ 不会覆盖已有 key
✅ 不会拷贝私钥
✅ 权限不会错
为什么大家都推荐它?
因为 手动做很容易踩坑:
| 常见坑 | 结果 |
|---|---|
传了 id_rsa(私钥) |
❌ 安全事故 |
| 权限不对 | ❌ 免密登录失败 |
覆盖了 authorized_keys |
❌ 之前的 key 全没了 |
| scp 路径写错 | ❌ 白折腾 |
👉 ssh-copy-id 把这些坑 全部屏蔽掉了
它和 scp / rsync 的本质区别
| 工具 | 用途 |
|---|---|
scp |
传文件 |
rsync |
同步目录 |
ssh-copy-id |
安装 SSH 公钥(一次性) |
ssh-copy-id是配置工具
不是通用拷贝工具
常见问题
Q1:它会不会覆盖服务器上的 key?
✅ 不会,只会追加
Q2:它用的到底是哪把 key?
默认顺序:
~/.ssh/id_rsa.pub~/.ssh/id_ed25519.pub- 其他可用 key
你也可以指定:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Q3:mac / Linux 都有吗?
✅ 基本都有
- macOS:自带
- Ubuntu / Debian:
openssh-client - CentOS / Rocky:
openssh-clients
最重要的一条安全原则(再强调一次)
🔒 私钥永远不出本机
🌍 服务器只存公钥
ssh-copy-id 正是为了保证这条原则不被破坏而存在的。