ssh-copy-id 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
ssh-copy-id——安全加密与审计命令族(见安全加密与审计命令族),也是远程访问工具链一环(见网络基础与远程访问命令族)。ssh-keygen 造好钥匙后,用它把公钥"寄"到远程。
ssh-copy-id 把本地公钥追加到远程用户的 ~/.ssh/authorized_keys,从而让你之后能用私钥免密登录。它会顺手把远端相关权限修正好,比手工拷贝省心。
一、基本用法
bash
ssh-copy-id user@host # 默认用 ~/.ssh/id_rsa / id_ed25519 公钥
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host # -i 指定用哪把公钥
ssh-copy-id -p 2222 user@host # -p 远程 SSH 端口不是 22 时
ssh-copy-id -o StrictHostKeyChecking=no user@host # 跳过 known_hosts 确认(脚本里谨慎用)最简单的
ssh-copy-id user@host会找默认公钥推过去,过程中要输一次远程密码(这是最后一次输密码)。之后就免密了。-i在多密钥场景下指定具体哪把。
二、它替你做了什么
text
1. 登录远程(用密码)
2. 创建 ~/.ssh(若不存在)
3. 把本地公钥追加进 ~/.ssh/authorized_keys
4. 修正权限:.ssh=700,authorized_keys=600这正是 ssh-copy-id 比"手工 scp 公钥再手动改权限"强的地方:它知道正确的权限设置。手工部署常因
authorized_keys权限不对(比如 644)导致免密失效,ssh-copy-id 把这个坑填平了。
三、ssh-copy-id 在免密链路中的位置
bash
ssh-keygen -t ed25519 # 1. 造钥匙(见 ssh-keygen /linux/cmd/ssh-keygen.md)
ssh-copy-id user@host # 2. 部署公钥
ssh user@host # 3. 免密登录(见 ssh /linux/cmd/ssh.md)三步一条龙。它是中间那一环——没有它,你得自己 scp 公钥再
cat >> authorized_keys再 chmod,麻烦且易出错。
四、踩坑:远程 HOME 在非标准位置时
bash
# 若远程用户的家目录/authorized_keys 路径特殊,ssh-copy-id 可能放错位置
# 这时需手工确认远程 AuthorizedKeysFile 配置(sshd_config)绝大多数情况开箱即用。但如果远程
sshd_config里AuthorizedKeysFile指向了非默认路径,ssh-copy-id 仍往默认~/.ssh/authorized_keys写,就会"部署了却仍要密码"。遇到这种改用手工放置或调整 sshd 配置。
五、实战:批量部署到一批机器
bash
for h in web1 web2 web3; do
ssh-copy-id -i ~/.ssh/id_deploy.pub deploy@$h
done一句话总结
ssh-copy-id = 一键把公钥装到远程:自动追加到 authorized_keys 并修好权限,免去手工 scp+chmod 的坑;-i 选公钥、-p 指定端口。它是 ssh-keygen 造钥匙之后的第二步,配合 ssh 完成免密登录。