一聚教程网:一个值得你收藏的教程网站

热门教程

SSH 密钥自动分发脚本如何写

时间:2026-08-08 10:15:49 编辑:袖梨 来源:一聚教程网

SSH密钥自动分发脚本的核心是用ssh-copy-id将本地公钥追加至目标机~/.ssh/authorized_keys并设权限为600;推荐配合循环批量执行,如while read host; do ssh-copy-id -i ~/.ssh/id_rsa.pub "$host"; done < hosts.txt。

SSH 密钥自动分发脚本的核心是用 ssh-copy-id 或手动推送公钥到目标主机的 ~/.ssh/authorized_keys,并确保权限正确。关键不是“写一个万能脚本”,而是根据实际环境(单台/多台、有无密码、是否启用 agent)选择合适方式,避免硬编码敏感信息。

基础版:单台主机一键分发

适用于已知目标 IP 和用户名,且本地有可用私钥、目标支持密码登录的场景:

  1. 先生成密钥对(如尚无):ssh-keygen -t ed25519 -C "[email protected]"
  2. ssh-copy-id 自动完成授权(最稳妥):ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
  3. 验证是否生效:ssh -i ~/.ssh/id_ed25519 [email protected]

批量分发:用循环处理多台主机

把目标主机列表存成文件(如 hosts.txt,每行格式:user@ip),再配合 ssh-copy-id 批量执行:

#!/bin/bashKEY_FILE="${HOME}/.ssh/id_ed25519.pub"HOSTS_FILE="hosts.txt"while IFS= read -r host; do[ -z "$host" ] && continueecho "正在向 $host 分发密钥..."ssh-copy-id -i "$KEY_FILE" "$host" || echo "⚠️$host 分发失败"done < "$HOSTS_FILE"

注意:需提前配置好 SSH 密码登录或使用 ssh-agent 管理密码,否则会卡在交互式密码输入。

免密码前提:启用 ssh-agent 并加载密钥

批量操作时频繁输密码体验差,建议启动 agent 并添加私钥:

  1. 启动 agent:eval "$(ssh-agent -s)"
  2. 添加密钥:ssh-add ~/.ssh/id_ed25519(会提示输入一次私钥密码)
  3. 之后所有 sshssh-copy-id 调用都复用该凭据,无需重复输入

安全与权限要点

自动分发后务必检查目标端权限,否则 SSH 会拒绝读取密钥文件:

  1. ~/.ssh 目录权限必须是 700chmod 700 ~/.ssh
  2. ~/.ssh/authorized_keys 权限必须是 600chmod 600 ~/.ssh/authorized_keys
  3. 脚本中避免明文写密码;若必须用密码登录批量主机,推荐配合 sshpass(不推荐生产环境)或改用基于密钥的跳转登录

不复杂但容易忽略细节。优先用 ssh-copy-id,它内置了权限校验和追加逻辑,比手动 cat ... | ssh ... 'tee ...' 更可靠。

热门栏目