首页/系统/Linux 运维命令速查/ssh-copy-id 部署公钥免密
网络命令82 条

ssh-copy-id 部署公钥免密

把本机公钥追加到远端 authorized_keys 并自动处理权限:免密登录最省事的一步。

Linux 运维命令速查系统更新于 2026-10-13

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_keys600权限过松会被忽略且不报错
家目录不可被组写家目录组可写同样导致拒绝
服务端开关允许公钥认证关闭时拷了也不生效
公钥内容单行完整手工粘贴引入换行会破坏密钥
验证免密要用禁止交互输入的选项:能返回结果才算真正免密,否则可能仍在走口令。
远端密钥文件或目录权限不正确时,sshd 会静默忽略,表现为仍然要求口令,容易误判为密钥本身有问题。
服务端配置中关闭公钥认证时,无论怎么拷贝都不会生效,先确认这一项再接续排查其他原因。

易错点

  • 目录或密钥文件权限过松会被 sshd 静默忽略,只表现为仍需口令,不容易联想到权限问题
  • 服务端关闭公钥认证时怎么拷都不生效,先去 /etc/ssh/sshd_config 确认该项
  • 手工粘贴公钥引入换行或多余空格会让密钥失效,用复制工具或文件传输方式更安全
  • 只验证能登录无法区分是密钥还是口令生效,用禁止交互输入的选项才能确认

数据来源与参考

  • man 1 ssh-copy-id(OpenSSH 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌