SSHセッションでローカル変数とリモート変数を使用する

SSHセッションでローカル変数とリモート変数を使用する

リモートサーバーでファイルが処理された後にいくつかのファイルを送信するスクリプトを作成しています。これには、スクリプトが実行されるローカルサーバーの変数が必要で、後でリモートサーバーの一部の変数が必要です。

私はいくつかの方法を試しましたが、Stack Exchangeこれまでのどれも私にはうまくいきませんでした。

以下に初期スクリプトを示します。

#!/bin/bash

set -x

export someID=$1

LOG=/folder/subfolder1/$someID/tmp/getResult.log
export DIR=/folder/subfolder1/$someID
export rc=0
export lServ=`hostname`

case $lServ in
        test.server*)
            remoteServer=remote.test.server
        ;;
        prod.server*|backup.server*)
            remoteServer=remote.prod.server
        ;;
esac

cd $DIR

ssh -v $remoteServer << 'EOF' >> $LOG 2>&1

    cd $someID

    folders=`ls`

    for file in $folders; do
        case $file in
        *.1)
            scp -v $file/outputFolder/$file.someExt $lServ:$DIR/p.someExt
            rc=`expr $rc + $?`
        ;;
        *)
            export subID=`echo $file | awk -F"." '{print $2}'
            scp -v $file/outputFolder/$file.ext $lServ:$DIR/k$subID.someExt 
            rc=`expr $rc + $?`
        ;;
        esac
    done

    case $rc in
    0)
        cd ..
        rm -rfv $someID
        export rc=$?
    ;;
    *)
        echo "some Errormessage"
        rc=`expr $rc + 1`
    ;;
    esac
EOF

rc=`expr $rc + $?`

exit $rc

会社の制限により、本名やフォルダ構造を公開できません。

ベストアンサー1

スクリプトの欠落部分は変数のようですrc。スクリプトは(ほとんど)ローカルコンピュータで実行されるため、次のことができます。

  • 一時ファイル名を作成してください外部リダイレクトされた部分、
  • その名前を使用してください~へリダイレクトされた部分と
  • $rc一時ファイルにエコー
  • 方向が指定されたセクションの外側の変数を読み込みます。

一時ファイル名の場合、通常は補完機能が使用されるため、mktempこれらのスニペットは次のとおりです。

  • 外部
    mytemp=$(mktemp)
    "rm -f $mytemp" トラップ EXIT HUP INT QUIT
  • ~へ
    # `SSH_CLIENT`から私のIPアドレスを取得します。
    my_addr=\$(echo "\$SSH_CLIENT" |awk '{printf \$1;}')
    結果=\$(mktemp)
    エコ"\$rc" >\$結果
    scp \$result\$my_addr:$mytemp
    rm -f \$結果
  • 外部
    rc=$(猫$私の一時)

ローカルサーバーからリモートサーバーに転送されない理由は、$someIDここで文書が次に終了するためです。

ssh -v $remoteServer << 'EOF' >> $LOG 2>&1

持つリーダー'EOF'コマンドに文字列を渡す前に文字列を拡張しないようにシェルに指示するフラグですssh。拡張するには、引用符を削除してください。ただし、これを行うには、$必要な各文字の前にバックスラッシュを追加する必要があります。離れて広がる殻。

ssh / scpの(quiet)オプションを使用-qして、スクリプトの出力を変数に簡単にリダイレクトできるものに減らす方が簡単です。

おすすめ記事