SSH密钥自动分发脚本的核心是用ssh-copy-id将本地公钥追加至目标机~/.ssh/authorized_keys并设权限为600;推荐配合循环批量执行,如while read host; do ssh-copy-id -i ~/.ssh/id_rsa.pub "$host"; done
SSH 密钥自动分发脚本的核心是用
ssh-copy-id或手动推送公钥到目标主机的~/.ssh/authorized_keys,并确保权限正确。关键不是“写一个万能脚本”,而是根据实际环境(单台/多台、有无密码、是否启用 agent)选择合适方式,避免硬编码敏感信息。基础版:单台主机一键分发
适用于已知目标 IP 和用户名,且本地有可用私钥、目标支持密码登录的场景:
- 先生成密钥对(如尚无):
ssh-keygen -t ed25519 -C "your_email@example.com"- 用
ssh-copy-id自动完成授权(最稳妥):ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100- 验证是否生效:
ssh -i ~/.ssh/id_ed25519 user@192.168.1.100批量分发:用循环处理多台主机
把目标主机列表存成文件(如
hosts.txt,每行格式:user@ip),再配合ssh-copy-id批量执行:#!/bin/bash KEY_FILE="${HOME}/.ssh/id_ed25519.pub" HOSTS_FILE="hosts.txt" while IFS= read -r host; do [ -z "$host" ] && continue echo "正在向 $host 分发密钥..." ssh-copy-id -i "$KEY_FILE" "$host" || echo "⚠️ $host 分发失败" done <p>注意:需提前配置好 SSH 密码登录或使用 <code>ssh-agent</code> 管理密码,否则会卡在交互式密码输入。</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2103" title="宝塔Linux面板11.3.0"><img src="https://img.php.cn/upload/manual/000/969/633/69ce352dd3cd8751.png" alt="宝塔Linux面板11.3.0" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/gongju/2103" title="宝塔Linux面板11.3.0" class="overflowclass">宝塔Linux面板11.3.0</a> <p class="overflowclass">宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。</p> </div> <a rel="nofollow" href="/xiazai/gongju/2103" title="宝塔Linux面板11.3.0" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h3>免密码前提:启用 ssh-agent 并加载密钥</h3><p>批量操作时频繁输密码体验差,建议启动 agent 并添加私钥:</p>
- 启动 agent:
eval "$(ssh-agent -s)"- 添加密钥:
ssh-add ~/.ssh/id_ed25519(会提示输入一次私钥密码)- 之后所有
ssh和ssh-copy-id调用都复用该凭据,无需重复输入安全与权限要点
自动分发后务必检查目标端权限,否则 SSH 会拒绝读取密钥文件:
~/.ssh目录权限必须是700(chmod 700 ~/.ssh)~/.ssh/authorized_keys权限必须是600(chmod 600 ~/.ssh/authorized_keys)- 脚本中避免明文写密码;若必须用密码登录批量主机,推荐配合
sshpass(不推荐生产环境)或改用基于密钥的跳转登录不复杂但容易忽略细节。优先用
ssh-copy-id,它内置了权限校验和追加逻辑,比手动cat ... | ssh ... 'tee ...'更可靠。











