1

さて、SSH経由で一連のコマンドを実行する必要があるスクリプトがありますが、提供されたターゲットがホスト名ではなくローカルパスである場合、同じコマンドをローカルで実行できるようにしたいと思います。

これで、ローカルで操作しているかどうかをそれほど問題なく判断できますが、実行するコマンドのセットが非常に複雑であり、ssh に直接引数として指定するのに適しているよりもはるかに多くのコマンドを実行する必要があります。

私がやりたいことは次のようなものです:

if [ -n "$HOST" ]
    then
        ssh "$HOST"
fi

# Run some commands
# exit

ただし、適切な変数を渡して、ローカルを対象とした場合にスクリプトを早期に終了させずに終了する方法など、明らかな問題があります。これが可能かどうかはわかりませんが、実際にリモートで実行されている通常のシェルコマンドを使用して上記のようなことを行う方法はありますか?

そうでない場合は、別の方法として、実行する必要があるコマンドを独自のシェル スクリプトに抽出し、ssh コマンドがシェル スクリプトを (まだ存在しない場合は) コピーしてから実行するようにします。それを行う方法もわかりませんか?私は基本的な UNIX コマンドには精通していますが、このようなものは知りません!

とにかく、可能であれば詳細な例とともに、これを行うための最良の方法に関する推奨事項をいただければ幸いです。

4

2 に答える 2

1

パスワードなしの SSH に公開鍵認証を設定したので、信頼は実際には問題になりません。

とにかく、私の最善の選択肢は、コマンドをシェルスクリプトに抽出し、必要に応じてサーバーに送信することです。とは言うものの、ここではドキュメントを使用してスクリプトを送信せずにそれを行うこともできると考えていますが、必要なときにスクリプトを送信することは、おそらく必要なワークロードにとってより効率的なオプションです。

ヒアドキュメントについて私が考えていたことの例を次に示します。

if [ -n "$HOST" ]; then ssh "$HOST" <<- 'REMOTE_SESSION'; fi

    # Some commands

if [ -n "$HOST" ]; then REMOTE_SESSION; fi

主な問題は、リモート セッションの「ブロック」内のコマンドが正しく構造化されていることを確認することです。これは、SSH 接続が開かれている場合、すべての標準入力と標準出力がリモート サーバー上にあるためです。

于 2013-04-20T19:41:22.447 に答える