ssh-copy-id 是什么
ssh-copy-id 把本机公钥追加到远端 ~/.ssh/authorized_keys,并自动创建目录、设置权限,省去手工复制粘贴容易引入的换行与空格问题。它是配置免密登录最省事的一步,前提是此刻还能用口令登录一次。
基本信息
| 适用平台 | Linux / macOS(OpenSSH 客户端自带) |
|---|---|
| 命令语法 | ssh-copy-id [-i 公钥] [-p 端口] user@host |
| 前置条件 | 远端允许口令登录,或已有可用密钥 |
| 副作用 | 公钥以追加方式写入,不会覆盖已有内容 |
典型使用场景
- 首次配置免密:新机器部署时一条命令完成公钥安装与权限设置
- 批量运维准备:为配置管理工具、备份脚本准备免密通道
- 非默认端口:用端口参数指定 SSH 端口,避免连到错误服务
- 更换密钥:指定新的公钥文件,追加后验证新密钥可用
- 排查免密失败:手工比对远端密钥文件与本地公钥是否一致
常用示例
常用示例
ssh-copy-id ops@10.0.0.5 # 默认使用本机默认公钥
ssh-copy-id -i ~/.ssh/id_ed25519.pub ops@10.0.0.5 # 指定公钥
ssh-copy-id -p 2222 ops@10.0.0.5 # 非默认端口
ssh -o BatchMode=yes ops@10.0.0.5 'echo ok' # 验证免密是否真的成功
ssh -o PreferredAuthentications=publickey ops@10.0.0.5 # 只用公钥方式登录
ssh-keygen -lf ~/.ssh/id_ed25519.pub # 打印本地公钥指纹,便于比对前置检查项
| 检查项 | 要求 | 说明 |
|---|---|---|
| ~/.ssh 目录权限 | 700 | 组或其他用户可写时 sshd 拒绝使用密钥 |
| authorized_keys | 600 | 权限过松会被忽略且不报错 |
| 家目录 | 不可被组写 | 家目录组可写同样导致拒绝 |
| 服务端开关 | 允许公钥认证 | 关闭时拷了也不生效 |
| 公钥内容 | 单行完整 | 手工粘贴引入换行会破坏密钥 |
验证免密要用禁止交互输入的选项:能返回结果才算真正免密,否则可能仍在走口令。
远端密钥文件或目录权限不正确时,sshd 会静默忽略,表现为仍然要求口令,容易误判为密钥本身有问题。
服务端配置中关闭公钥认证时,无论怎么拷贝都不会生效,先确认这一项再接续排查其他原因。