【Linux】工业级shell脚本一键搞定 SSH 免密信任!

【Linux】工业级shell脚本一键搞定 SSH 免密信任!今天分享一个工业级脚本 三分钟建立全局 SSH 信任体系 该脚本用于自动化建立 SSH 双向信任关系 支持从文件导入 IP 地址和密码 并自动清理密码中的空格 你是否也经历过这些场景 管理 200 台服务器 每次部署都要手动输入密码 新同事误操作导

欢迎大家来到IT世界,在知识的湖畔探索吧!

今天分享一个工业级脚本,三分钟建立全局SSH信任体系。该脚本用于自动化建立SSH双向信任关系,支持从文件导入 IP 地址和密码,并自动清理密码中的空格。

你是否也经历过这些场景:

  • 管理 200 台服务器,每次部署都要手动输入密码。
  • 新同事误操作导致known_hosts文件混乱。
  • 密钥泄露后连夜逐台服务器替换。

今天分享一个工业级脚本,3 分钟建立全局SSH信任体系。

一、免密登录的基本原理

Linux服务器之间实现SSH免密登录,主要依赖公私钥认证 机制:

  • 跳板机生成SSH密钥对(私钥&公钥)
  • 将公钥(id_rsa.pub)分发到目标服务器的 ~/.ssh/authorized_keys
  • 确保权限正确,SSH配置允许公钥认证
  • 验证SSH免密登录是否生效。
【Linux】工业级shell脚本一键搞定 SSH 免密信任!



欢迎大家来到IT世界,在知识的湖畔探索吧!

二、代码实现

1. 读取列表清单

文件中的信息是以“IP 地址:密码”的格式呈现的,同时我们也支持在文件中添加注释以及留空行。以下函数是检查目标文件。

# 输入验证:检查目标文件 validate_input() { # 检查目标文件是否存在 if [ ! -f "$TARGET_FILE" ]; then echo "[ERROR] 目标文件不存在: $TARGET_FILE" | tee -a $LOG_FILE exit 1 fi # 读取文件并过滤有效IP和密码(支持#注释和空行) mapfile -t TARGET_ENTRIES < <(grep -vE '^#|^#39; "$TARGET_FILE") # 检查是否读取到有效条目 if [ ${#TARGET_ENTRIES[@]} -eq 0 ]; then echo "[ERROR] 目标文件中未找到有效IP和密码" | tee -a $LOG_FILE exit 1 fi echo "[$(date +%F%T)] 已加载目标IP和密码列表:" | tee -a $LOG_FILE printf '%s\n' "${TARGET_ENTRIES[@]}" | tee -a $LOG_FILE }

欢迎大家来到IT世界,在知识的湖畔探索吧!

2. 生成密钥

以下函数是在.ssh生成一个秘钥对。

欢迎大家来到IT世界,在知识的湖畔探索吧!# 生成跳板机密钥 generate_key() { echo "[$(date +%F%T)] 正在生成跳板机密钥..." | tee -a $LOG_FILE if [ ! -f ~/.ssh/id_${KEY_TYPE} ]; then ssh-keygen -t ${KEY_TYPE} -N "" -f ~/.ssh/id_${KEY_TYPE} -q [ $? -eq 0 ] && echo "密钥生成成功" || exit 1 fi }

3. 部署公钥文件

秘钥对生成后,通过以下函数部署公钥。

# 批量部署公钥到目标节点 deploy_key() { local ip=$1 local password=$2 echo "[$(date +%F%T)] 正在处理节点 $ip" | tee -a $LOG_FILE for ((i=1; i<=$RETRY_TIMES; i++)); do SSHPASS="$password" sshpass -e ssh-copy-id \ -o StrictHostKeyChecking=no \ -o ConnectTimeout=10 \ -i ~/.ssh/id_${KEY_TYPE}.pub \ $USER@$ip >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "节点 $ip 公钥部署成功" | tee -a $LOG_FILE return 0 else echo "节点 $ip 第$i次尝试失败,等待重试..." | tee -a $LOG_FILE sleep $((i*2)) fi done echo "[ERROR] 节点 $ip 公钥部署失败!" | tee -a $LOG_FILE return 1 }

三、脚本演示

先准备设备清单。内容如下:

欢迎大家来到IT世界,在知识的湖畔探索吧!# 生产环境服务器列表 192.168.31.101:password 192.168.31.102:password 192.168.31.103:password

执行如下命令给脚本赋予执行的权限

chmod +x auto_ssh_trust.sh

执行完成上述命令后,输出如下结果:

【Linux】工业级shell脚本一键搞定 SSH 免密信任!

脚本亮点:

(1) 支持 IP 和密码文件格式

  • 文件格式为 IP:密码,支持注释(以#开头)和空行
  • 自动解析并提取 IP 和密码:
欢迎大家来到IT世界,在知识的湖畔探索吧!ip=$(echo "$entry" | cut -d':' -f1 | xargs) password=$(echo "$entry" | cut -d':' -f2 | xargs)

(2) 日志记录与审计

  • 记录每个节点的部署状态(成功/失败)
  • 生成校验报告,验证信任关系是否建立成功

(3) 错误处理与重试机制

  • 单节点失败后自动重试(最多 3 次)
  • 跳过无效条目,继续处理其他节点。

四、小结

该脚本用于自动化建立SSH双向信任关系,支持从文件导入 IP 地址和密码,并自动清理密码中的空格。通过生成Ed25519密钥、批量部署公钥、配置反向信任和记录审计日志,帮助运维人员高效管理多台服务器的SSH免密登录。


【Linux】工业级shell脚本一键搞定 SSH 免密信任!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/125787.html

(0)
上一篇 2天前
下一篇 2天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信