摘要:跳板机生成SSH密钥对(私钥&公钥)将公钥(id_rsa.pub)分发到目标服务器的 ~/.ssh/authorized_keys确保权限正确,SSH配置允许公钥认证验证SSH免密登录是否生效。
今天分享一个工业级脚本,三分钟建立全局SSH信任体系。该脚本用于自动化建立SSH双向信任关系,支持从文件导入 IP 地址和密码,并自动清理密码中的空格。
你是否也经历过这些场景:
管理 200 台服务器,每次部署都要手动输入密码。新同事误操作导致known_hosts文件混乱。密钥泄露后连夜逐台服务器替换。今天分享一个工业级脚本,3 分钟建立全局SSH信任体系。
在Linux服务器之间实现SSH免密登录,主要依赖公私钥认证 机制:
跳板机生成SSH密钥对(私钥&公钥)将公钥(id_rsa.pub)分发到目标服务器的 ~/.ssh/authorized_keys确保权限正确,SSH配置允许公钥认证验证SSH免密登录是否生效。文件中的信息是以“IP 地址:密码”的格式呈现的,同时我们也支持在文件中添加注释以及留空行。以下函数是检查目标文件。
# 输入验证:检查目标文件validate_input {# 检查目标文件是否存在if [ ! -f "$TARGET_FILE" ]; thenecho "[ERROR] 目标文件不存在: $TARGET_FILE" | tee -a $LOG_FILEexit 1fi# 读取文件并过滤有效IP和密码(支持#注释和空行)mapfile -t TARGET_ENTRIES以下函数是在.ssh生成一个秘钥对。
# 生成跳板机密钥generate_key {echo "[$(date +%F%T)] 正在生成跳板机密钥..." | tee -a $LOG_FILEif [ ! -f ~/.ssh/id_${KEY_TYPE} ]; thenssh-keygen -t ${KEY_TYPE} -N "" -f ~/.ssh/id_${KEY_TYPE} -q[ $? -eq 0 ] && echo "密钥生成成功" || exit 1fi}秘钥对生成后,通过以下函数部署公钥。
# 批量部署公钥到目标节点deploy_key {local ip=$1local password=$2echo "[$(date +%F%T)] 正在处理节点 $ip" | tee -a $LOG_FILEfor ((i=1; i/dev/null 2>&1if [ $? -eq 0 ]; thenecho "节点 $ip 公钥部署成功" | tee -a $LOG_FILEreturn 0elseecho "节点 $ip 第$i次尝试失败,等待重试..." | tee -a $LOG_FILEsleep $((i*2))fidoneecho "[ERROR] 节点 $ip 公钥部署失败!" | tee -a $LOG_FILEreturn 1}先准备设备清单。内容如下:
# 生产环境服务器列表192.168.31.101:password192.168.31.102:password192.168.31.103:password执行如下命令给脚本赋予执行的权限
chmod +x auto_ssh_trust.sh执行完成上述命令后,输出如下结果:
脚本亮点:
(1) 支持 IP 和密码文件格式
文件格式为 IP:密码,支持注释(以#开头)和空行自动解析并提取 IP 和密码:(2) 日志记录与审计
记录每个节点的部署状态(成功/失败)生成校验报告,验证信任关系是否建立成功该脚本用于自动化建立SSH双向信任关系,支持从文件导入 IP 地址和密码,并自动清理密码中的空格。通过生成Ed25519密钥、批量部署公钥、配置反向信任和记录审计日志,帮助运维人员高效管理多台服务器的SSH免密登录。
来源:辉哥传书vlog