Linux怎么编写脚本批量更新上百台服务器的SSH免密登录密钥

千静同学_9051

千静同学_9051

2026-10-14

793人浏览

原创

推荐使用 ssh-keygen -t ecdsa -b 256 -f ~/.ssh/batch_deploy_id_ecdsa -n "" -c "batch-deploy-$(date +%y%m%d)" 生成密钥,因其兼容openssh 5.7+、体积小、无密码且路径明确,避免覆盖个人密钥。

linux怎么编写脚本批量更新上百台服务器的ssh免密登录密钥

怎么用 ssh-keygen 生成适合批量分发的密钥对

直接用默认参数生成的密钥(ssh-keygen -t rsa)在旧版 OpenSSH(如 CentOS 7 默认的 6.6p1)上可能不被接受,因为缺少 -b 2048 或明确指定 -t ecdsa -b 256。批量部署时,必须统一密钥类型和长度,否则部分服务器会报 no mutual signature algorithm 或拒绝认证。

推荐命令:

ssh-keygen -t ecdsa -b 256 -f ~/.ssh/batch_deploy_id_ecdsa -N "" -C "batch-deploy-$(date +%Y%m%d)"
  • -t ecdsa -b 256 兼容性好、体积小、OpenSSH 5.7+ 均支持;RSA 4096 虽安全但某些嵌入式设备或老旧系统解析慢甚至失败
  • -N "" 确保密钥无密码,否则脚本无法自动分发
  • -f 指定路径,避免覆盖个人密钥;不要用 id_rsa 这类通用名,防止后续误用

如何用 ssh-copy-id 批量推送公钥而不卡住

ssh-copy-id 默认逐台阻塞执行,且遇到首次连接的主机时会停在 “Are you sure you want to continue connecting” 提示上。不处理这个,脚本会在第一台就挂住。

关键绕过方式:

ssh-copy-id -o StrictHostKeyChecking=no -o ConnectTimeout=5 -i ~/.ssh/batch_deploy_id_ecdsa.pub user@host
  • StrictHostKeyChecking=no 跳过 host key 确认(生产环境建议先预存可信 host key 到 ~/.ssh/known_hosts)
  • ConnectTimeout=5 防止某台宕机导致整个流程卡死
  • 必须加 -i 显式指定公钥路径,否则默认用 id_rsa.pub,容易错用
  • 如果目标服务器禁用了密码登录(PasswordAuthentication no),ssh-copy-id 会失败——此时只能改用 scp + ssh 手动追加

免密登录后,怎么用 for 循环批量执行密钥更新操作

不能只靠 ssh-copy-id 推一次就完事。真实场景中,你往往要:禁用密码登录、清理旧密钥、设置权限、重启 sshd。这些必须在每台机器上串行执行,且任一环节失败需可感知。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

推荐最小可靠写法:

for host in $(cat servers.txt); do
  echo "=== $host ==="
  ssh -o ConnectTimeout=3 -i ~/.ssh/batch_deploy_id_ecdsa user@$host "
    mkdir -p ~/.ssh && \
    chmod 700 ~/.ssh && \
    echo '$(cat ~/.ssh/batch_deploy_id_ecdsa.pub)' >> ~/.ssh/authorized_keys && \
    chmod 600 ~/.ssh/authorized_keys && \
    sed -i 's/^#*PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && \
    systemctl restart sshd 2>/dev/null || echo 'sshd restart failed or not systemd'
  " || echo "FAILED on $host"
done
  • 所有远程命令用双引号包裹,并用 $() 内联读取本地公钥内容(注意:单引号会失效)
  • 每步加 && 保证顺序执行,失败即停;末尾 || echo 让错误可见
  • systemctl restart sshd 在 SysV init 系统(如 CentOS 6)会报错,所以加 2>/dev/null 并 fallback 提示
  • 别在循环里用 ssh-agent 或后台进程——它不会跨 ssh 调用生效

为什么用 ansible 替代纯 Shell 脚本更稳

当服务器数量超过 50 台,或网络质量不稳定时,纯 for 循环会暴露严重缺陷:无并发控制、无失败重试、无状态回滚、日志分散难排查。

一个能立刻上手的 Ansible 方案:

ansible all -i hosts.ini -u user --key-file ~/.ssh/batch_deploy_id_ecdsa \
  -m authorized_key \
  -a "user=user key='{{ lookup('file', '~/.ssh/batch_deploy_id_ecdsa.pub') }}' state=present" \
  -e "ansible_ssh_extra_args='-o ConnectTimeout=3'"
  • hosts.ini 里按组划分,支持 [prod]、[staging],便于灰度操作
  • authorized_key 模块自动处理权限、去重、原子写入,比手动 >> 安全得多
  • 加 -e ansible_ssh_extra_args 统一传参,比在每个任务里写 args 更干净
  • 真正需要“更新密钥”时,多数人其实是要轮换——Ansible 的 lineinfile 或 template 模块配合变量,比 Shell 拼接字符串靠谱十倍

密钥轮换不是“推一次就结束”的事,而是涉及验证、回退窗口、服务影响评估的持续过程。哪怕只用 Shell,也务必先在 3 台同类机器上完整跑通再放大,尤其注意 sshd_config 修改后是否真生效、旧密钥是否被正确清理。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

920

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2892

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

956

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

869

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2616

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4872

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

767

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习