最安全、最推荐的方式是使用 ssh-copy-id 命令,它自动完成公钥上传、~/.ssh 目录创建(权限700)和 authorized_keys 文件设置(权限600),避免手动出错;前提是本地已用 ssh-keygen -t ed25519 生成密钥对。

最安全、最推荐的方式是使用 ssh-copy-id 命令。它自动完成公钥上传、目录创建、权限设置(如 ~/.ssh 设为 700,authorized_keys 设为 600),避免手动操作出错或留下安全隐患。
前提:确保本地已生成密钥对
若尚未生成,运行:
-
ssh-keygen -t ed25519 -C "your_email@example.com"(推荐 ed25519,更安全高效) - 直接回车使用默认路径
~/.ssh/id_ed25519和~/.ssh/id_ed25519.pub - 可选:输入 passphrase 加强私钥保护(非空密码)
用 ssh-copy-id 复制公钥(标准流程)
执行命令后,仅需输入一次远程用户密码,其余全由工具自动处理:
- 基础用法:
ssh-copy-id user@192.168.1.100 - 指定非标准端口(如 2222):
ssh-copy-id -p 2222 user@192.168.1.100 - 指定自定义公钥文件:
ssh-copy-id -i ~/.ssh/mykey.pub user@host - 通过跳板机传到内网主机:
ssh-copy-id -o "ProxyJump admin@jump.example.com" user@inner-server
手动复制(仅当 ssh-copy-id 不可用时)
务必严格控制权限,否则 SSH 会拒绝读取密钥文件:
- 在本地查看公钥:
cat ~/.ssh/id_ed25519.pub,复制全部内容(含ssh-ed25519 AAAA...开头的一整行) - 登录远程服务器:
ssh user@host - 在远程端执行:
mkdir -p ~/.ssh && chmod 700 ~/.sshecho "粘贴的公钥内容" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
验证与加固
复制完成后立即测试,并可选关闭密码登录提升安全性:
- 测试免密登录:
ssh user@host—— 成功即无提示输密码(若私钥有 passphrase,则需输该密码) - 禁用密码认证(生产环境建议):
登录远程服务器后运行:sudo sed -i 's/^#*PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config && sudo systemctl restart sshd


















