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を表示することです。

おすすめ記事