ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux命令-ssh-copy-id(复制公钥到远程主机)

2026/8/10 21:06:03 拓冰建站 浏览量
Linux命令-ssh-copy-id(复制公钥到远程主机) Linux命令-ssh-copy-id复制公钥到远程主机快速参考基本用法完整操作流程选项详解批量部署故障排查安全注意事项ssh-copy-id是最简单、最安全的方式将 SSH 公钥部署到远程服务器实现免密登录。它将公钥追加到远程服务器的~/.ssh/authorized_keys文件中并自动处理文件权限问题避免了手动scp 权限修正的繁琐流程。快速参考ssh-copy-id[选项][用户]主机核心原理通过 SSH 连接仍使用密码认证将本地公钥追加到远端authorized_keys完成后即可使用密钥登录。基本用法# 将默认公钥复制到远程主机ssh-copy-id userremote_host# 需要输入远程用户的密码最后一次# 指定端口ssh-copy-id-p2222userremote_host# 指定要复制的公钥文件ssh-copy-id-i~/.ssh/id_ed25519.pub userremote_host# 指定多个公钥ssh-copy-id-i~/.ssh/id_rsa.pub userserver1 ssh-copy-id-i~/.ssh/id_ed25519.pub userserver1# 将公钥复制到跳板机后的内网主机ssh-copy-id-oProxyJump userjump_hostuserinternal_host完整操作流程# 1. 如果没有密钥先生成ssh-keygen-ted25519-Cmy_deploy_key# 2. 复制公钥到目标服务器ssh-copy-id root192.168.1.100# /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ...# /usr/bin/ssh-copy-id: INFO: attempting to log in...# root192.168.1.100s password: ← 输入密码最后一次## Number of key(s) added: 1# Now try logging into the machine, with: ssh root192.168.1.100# 3. 验证免密登录成功sshroot192.168.1.100# 成功无需输入密码# 4. 禁止密码登录可选更安全sshroot192.168.1.100sed-is/^#PasswordAuthentication yes/PasswordAuthentication no//etc/ssh/sshd_config systemctl restart sshd选项详解# -i: 指定公钥文件推荐用法ssh-copy-id-i~/.ssh/custom_key.pub deployprod_server# -f: 强制模式仅在密钥已存在时检查ssh-copy-id-f-i~/.ssh/id_ed25519.pub userhost# -n: 干运行仅显示将要复制的内容不实际执行ssh-copy-id-nuserhost# -p: 指定 SSH 端口ssh-copy-id-p2222userhost# -o: 传递 SSH 选项ssh-copy-id-oStrictHostKeyCheckingnousernew_host ssh-copy-id-oIdentityFile~/.ssh/alt_keyuserhost批量部署# 向多台服务器复制公钥SERVERS(userserver1.example.comuserserver2.example.comuserserver3.example.com)forserverin${SERVERS[]};doecho部署到:$serverssh-copy-id-i~/.ssh/id_ed25519.pub$serverif[$?-eq0];thenecho✅$server部署成功elseecho❌$server部署失败fidone# 从 hosts 文件批量部署whileIFSread-rhost;do[[-z$host||$host~^# ]] continueecho正在部署到:$hostssh-copy-id-i~/.ssh/id_ed25519.pub-oConnectTimeout5$host21doneservers.txt# 并行批量部署需要安装 parallelcatservers.txt|parallel-j5ssh-copy-id -i ~/.ssh/id_ed25519.pub {}# 从 AWS EC2 获取实例并批量部署aws ec2 describe-instances\--queryReservations[*].Instances[*].PrivateIpAddress\--outputtext|whilereadip;dossh-copy-id-i~/.ssh/aws_key.pub ec2-user$ipdone故障排查# 问题 1: Permission denied (publickey)# 原因首次连接还未复制密钥# 解决使用密码先复制一次或检查 sshd_configssh-copy-id userhost# 输入密码即可# 问题 2: 复制成功但仍需密码# 检查远端权限sshuserhostls -la ~/.ssh/# 应显示# drwx------ .ssh/# -rw------- authorized_keys# 修复权限sshuserhostchmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys# 问题 3: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED# 清除旧的密钥指纹ssh-keygen-f~/.ssh/known_hosts-Rremote_host# 问题 4: 查看远端被添加的公钥sshuserhostcat ~/.ssh/authorized_keys# 问题 5: authorized_keys 中重复的公钥清理sshuserhostsort -u ~/.ssh/authorized_keys /tmp/auth_keys mv /tmp/auth_keys ~/.ssh/authorized_keys安全注意事项最佳实践部署完成后立即禁用密码登录PasswordAuthentication no使用ed25519算法废弃 RSA 2048 位不同环境使用不同密钥对个人 / 工作 / 部署定期审查authorized_keys文件# 部署后锁定 SSH 配置cat/etc/ssh/sshd_configEOF PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF# 测试配置不重启服务sshd-t# 保留一个测试会话在新窗口测试密钥登录# 确认无误后再关闭密码会话# 查看哪些公钥已授权sshuserhostcat ~/.ssh/authorized_keys | while read key; do echo \$key| cut -d -f3; donessh-copy-id是 SSH 密钥管理中最基础也最高频的命令。它用一行命令完成了原本需要多个步骤的操作并将权限问题一并处理。每个 Linux 使用者都应该熟练掌握。