SSH:远程变量

SSH:远程变量

我想通过 ssh 运行一个复杂的脚本

#!/bin/sh

ARRAY1=(
server1s
server123
server12
server14
server13
)


for i in ${ARRAY1[@]};do ssh  $i "
    case \$HOSTNAME in 

server1.domain.com)
echo try1
  ;;
server12.domain.com)
echo try12
  ;;
*)
echo try123
  ;;
esac

问题是 ssh 读取我的内部主机名变量并返回 try123,是否可以读取远程站点的内部变量?我尝试过 \$VARIABLE 和 $VARIABLE 但结果是相同的

答案1

在这种情况下,使用\$HOSTNAME是转义变量的正确方法。

但是,该变量通常包含主机名(非 FQDN),或者可能未填充。您应该使用该命令hostname -f来获取服务器 FQDN。

我不知道你的最终脚本会是什么样子,但是连接server1然后检查该服务器是否server1可能是某种无用的(出于安全目的)。

您可以编写一些脚本,例如script1.sh包含

echo "$HOSTNAME / $(hostname -f)"

然后

for i in ${ARRAY1[@]};do
    case $i in
      server1) ssh $i < script1.sh
      ;;
      server2) ssh $i < script2.sh
      ;;
      *) ssh $i < script_${i}.sh
    esac
 done 

编辑:正如评论中所述,OpenBSD 发布的版本hostname不理解-f选项。默认行为是显示 FQDN。

相关内容