You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写链式SSH脚本实现将s1公钥自动添加至可变s3服务器授权列表

s1公钥批量推送至s3脚本实现

前置确认

  • 脚本部署在s1服务器上运行
  • 提前确认s1的~/.ssh/id_rsa.pub公钥文件已生成
  • 提前验证s1到s2免密登录、s2到所有待操作s3免密登录功能正常

完整可执行脚本

将以下内容保存为push_s1_pubkey_to_s3.sh:

#!/bin/bash

# 入参校验
if [ $# -ne 1 ]; then
    echo "用法: $0 <s3服务器IP地址>"
    exit 1
fi

# 固定配置项,请替换为你环境的实际值
S2_ADDR="s2的实际IP或主机名"
S2_USER="s2的SSH登录用户名"
S3_USER="s3的SSH登录用户名" # 若不同s3用户名不同,可调整为第二个入参

# 读取s1本地公钥内容
S1_PUBKEY=$(cat ~/.ssh/id_rsa.pub)
S3_IP=$1

# 双层SSH执行远端检查和添加逻辑
ssh ${S2_USER}@${S2_ADDR} ssh ${S3_USER}@${S3_IP} "'
# 确保s3的ssh目录权限正确
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 整行匹配公钥是否已存在
if ! grep -qxF \"${S1_PUBKEY}\" ~/.ssh/authorized_keys 2>/dev/null; then
    echo \"${S1_PUBKEY}\" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    echo "INFO: s1公钥已成功添加到s3[${S3_IP}]"
else
    echo "INFO: s1公钥已存在于s3[${S3_IP}],无需操作"
fi
'"

使用方法

  1. 给脚本添加执行权限:chmod +x push_s1_pubkey_to_s3.sh
  2. 执行时传入目标s3的IP即可,示例:./push_s1_pubkey_to_s3.sh 192.168.3.10

验证方式

脚本执行完成后,可在s1上直接执行以下命令验证免密登录是否生效:
ssh -J ${S2_USER}@${S2_ADDR} ${S3_USER}@<s3的IP地址>
无需输入密码即配置成功。

内容的提问来源于stack exchange,提问作者Timofey Pasichnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:18:04