服务器多?密码烦?用这个脚本,一键搞定 SSH 免密信任!
创作时间:
作者:
@小白创作中心
服务器多?密码烦?用这个脚本,一键搞定 SSH 免密信任!
引用
51CTO
1.
https://server.51cto.com/article/810105.html
在运维工作中,管理多台服务器的SSH登录是一个常见需求。本文将介绍一个自动化脚本,帮助运维人员快速建立SSH免密信任体系,实现一键部署和管理。
一、免密登录的基本原理
在Linux服务器之间实现SSH免密登录,主要依赖公私钥认证机制:
- 跳板机生成SSH密钥对(私钥&公钥)
- 将公钥(id_rsa.pub)分发到目标服务器的 ~/.ssh/authorized_keys
- 确保权限正确,SSH配置允许公钥认证
- 验证SSH免密登录是否生效。
二、代码实现
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 '^#|^$' "$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
}
2. 生成密钥
以下函数是在.ssh生成一个秘钥对。
# 生成跳板机密钥
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
}
三、脚本演示
先准备设备清单。内容如下:
# 生产环境服务器列表
192.168.31.101:password
192.168.31.102:password
192.168.31.103:password
执行如下命令给脚本赋予执行的权限:
chmod +x auto_ssh_trust.sh
执行完成上述命令后,输出如下结果:
脚本亮点:
- 支持 IP 和密码文件格式
- 文件格式为 IP:密码,支持注释(以#开头)和空行
- 自动解析并提取 IP 和密码:
ip=$(echo "$entry" | cut -d':' -f1 | xargs) password=$(echo "$entry" | cut -d':' -f2 | xargs)
- 日志记录与审计
- 记录每个节点的部署状态(成功/失败)
- 生成校验报告,验证信任关系是否建立成功
- 错误处理与重试机制
- 单节点失败后自动重试(最多 3 次)
- 跳过无效条目,继续处理其他节点。
四、小结
该脚本用于自动化建立SSH双向信任关系,支持从文件导入 IP 地址和密码,并自动清理密码中的空格。通过生成Ed25519密钥、批量部署公钥、配置反向信任和记录审计日志,帮助运维人员高效管理多台服务器的SSH免密登录。
热门推荐
全球视野下的恐怖习俗:从鬼怪到妖魔的跨文化解析
工地工伤保险:用人单位的责任与法律保障
娱乐圈翻车现场频发,央视怒批,冯远征呼吁演员提高自我修养
AI:探讨大模型的自动学习能力
处暑·养生|饮食应清淡、滋阴润燥,要特别注意情绪调节
洗衣机「筒自洁」的正确使用方法:你真的用对了吗?
深度剖析安卓系统应用权限:重要性、管理策略与最佳实践
如何正确配置DNS文件以优化网络连接速度和安全性?
7首最感人的亲情古诗词,浓浓父母心,感动千年,值得摘抄收藏!
网络操作系统(NOS):功能、特点及应用场景详解
刚生完小孩离婚如何规定的?三个孩子离婚怎么处理?
哪里可以获取关于量子计算机的最新资讯?
氮化铝陶瓷:无机非金属材料中的导热之王
氮化铝在半导体工业中的应用
肺部有积液影像表现是什么
声卡调试技巧与注意事项:提升音质的实用指南与建议
日本车企利润骤降94%,裁员9000人,中国新能源汽车行业迎头赶上
公司宣布破产员工应该有哪些赔偿
高考500分左右,学生可“优先”选择这6所大学,就业率均不低90%
将电话营销与其他渠道集成的最佳实践
履约保函担保现金流量的法律适用与实践探讨
【癫痫进阶①】癫痫药物治疗规范与进展
印花税应在什么时间进行申报
算法工程师应该学什么专业?职业规划与学习指南
以太网显示网络电缆被拔出怎么办?8个实用解决方案帮你轻松应对
以太网显示"未识别的网络"?这份详细排查指南请收好
人类意识的起源,科学是否能够找到答案?
如何有效使用电脑锁屏功能保护隐私与数据安全的全攻略
乙丑日是哪一天 乙丑日出生的人命运如何?
台积电股价下跌3.9%引发市场关注