2011-07-14 9 views
5

this questionには、ステートメントをセミコロンで区切って回答したようです。しかし、複数のif文と複雑な引用符付きの文字列を使用して複雑なスクリプトを作成すると、煩雑になる可能性があります。私は思うだろう。SSHを使用してリモートマシン上で複数のコマンドを発行する別の方法はありますか?

複数のSSHコマンドを1つずつ発行することもできますが、もう厄介なことになります。さらに、パブリック/プライベートキー認証用に設定されていないので、回。

対話的なシェル体験とよく似ているのは、スクリプトの1つの点で、@ the_remote_serverにsshし、(対話形式で)入力したパスワードを入力するように求めます。スクリプトが "exit"コマンドを発行するまで、スクリプト内のすべてのコマンドはリモートマシン上で解釈されます。もちろん

これは動作しません:

ssh [email protected] 
    cd some/dir/on/remote/machine 
    tar -xzf my_tarball.tgz 
    cd some/other/dir/on/remote 
    cp -R some_directory somewhere_else 
exit 

は、別の代替はありますか?私はスクリプトの中からその部分を取り出し、それをリモートホスト上のスクリプトに貼り付けることができると思います。 Meh。今私は2つのスクリプトを維持しています。プラス私は少しの設定ファイルがデフォルトと他のものを保持したいと思うし、私は2つの場所でそれを維持したくない。

他に解決策はありますか?

答えて

9

ヘレドックを使用してください。

ssh [email protected] << EOF 
cd some/dir/on/remote/machine 
tar -xzf my_tarball.tgz 
cd some/other/dir/on/remote 
cp -R some_directory somewhere_else 
EOF 
+0

のような。ありがとう! –

+0

あなたのheredocスクリプトがより複雑になり(特に変数を使用)、heredoc delimterを引用する必要があります: '' '' EOF ''。その後、heredocは文字通りリモートマシンに送られ、あなたのローカルシェルはそれを解釈しようとしません。 –

3

使用ヒアドキュメント

ssh [email protected] <<EOD 
cd some/dir/on/remote/machine 
... 
EOD 

やパイプのような構文、卓越した

echo "ls -al" | ssh [email protected] 
+0

+1パイプのアイデアにも感謝します! –

関連する問題