シェルスクリプトのSSHシェルスクリプトのSSH

シェルスクリプトのSSHシェルスクリプトのSSH

今すぐこれをテストする能力があるかどうかはわかりませんが、次のようにできるか提案できる人がいるかどうか疑問に思います。

Run a shell script
    Shell Script SSH's into a machine (Connection requires SSH key only)
        Stuff is run on that machine
        Script run on that machine SSH's into another machine (Connection requires SSH key and password)
            Stuff is run in that machine
            Exit from that machine
        Stuff is run in that machine
        Exit from that machine
    More stuff happens for a few hours

おそらく、必要なスクリプトのスクリプトを組み立てて実行させるだけです。他のSoF問題の例を借りるには:

sshScript='
    ls -la
    sshScript2=`
        ls -la
    `
    ssh -t ${UserName}@server "${sshScript2}"
    ls -la
'
ssh -t ${UserName}@server "${sshScript}"

sudoの場合、何を実行する必要がありますかsudo -s -u user bash -c script

これは無限ループが発生するかどうかわからず、接続されているコンピュータが生産中であるため、テスト目的でそのコンピュータを損傷する危険性を余裕がありません。

答え1

この場合、私は通常heredocを使用してリモートシェルにスクリプトを提供します。ただし、スクリプトが標準入力のユーザー入力を要求する場合は使用できません。

ssh ${UserName}@server <<EOF1
ls -la
ssh ${UserName}@server <<EOF2
ls -la
EOF2
ls -la
EOF1

答え2

はい。可能。ただし、スクリプトが長い場合は、ControlMasterAnsibleのように、より多くのコマンドでこれを行うことをお勧めします。それ以外の場合は、投稿に表示されるすべての引用符、バックスラッシュ、およびアイテムに迷子になります。

scp script1.sh remote:/tmp/
ssh remote "bash /tmp/script.sh"

また、script.shリモートコンピュータから他のコンピュータへの同様の配置を含めることができます。スクリプトにはrm /tmp/script.sh自動クリーンアップ機能も含めることができます。

答え3

-q -o "BatchMode=yes"""オプションを使用するだけでなく、次のものを使用することをお勧めします。公開鍵認証

また、特定のコマンドの潜在的なローカル解釈に関連する問題を回避するために、リモートサーバーで実行したいコマンドを一重引用符で囲むことも検討してください。

たとえば、ssh -q -o "BatchMode=yes" user@server 'ls -al'

これは非常に一般的な技術(ネストされたSSH)です。これを実装するには問題はありません。

関連情報