
リモートサーバーのシェルスクリプトを想像してみてください。
#!/bin/bash
rm /test.x
可能であれば、ローカルコンピュータでこのスクリプトを実行して/test.x
ローカルコンピュータのファイルを削除するにはどうすればよいですか?明らかに解決策は、認証などを使用しますが、リモートssh
サーバーからスクリプトファイルをダウンロードしないことです。
実際、私はローカルコンピュータで実行されるシェルコマンドのプロバイダとしてリモートスクリプトを使用したいと思います。
答え1
何とかスクリプトの内容をダウンロードする必要があります。あなたはできます
ssh remote-host cat script.bash | bash
しかし、これは同じ問題を引き起こします。
cat script.bash | bash
つまり、スクリプトのstdinはスクリプト自体になります(スクリプトのコマンドがユーザーからいくつかの入力を受け取る必要がある場合は問題になる可能性があります)。
より良い選択肢(しかし、ksh、zsh、bashなどのプロセス交換をサポートするシェルが必要です)は次のとおりです。
bash <(ssh remote-host cat script.bash)
どちらの方法もスクリプトをダウンロードしてその内容を検索しますが、ローカルに保存することはありません。代わりに、コンテンツはパイプに供給され、パイプのもう一方の端でそれを読み、解釈しますbash
。
次のコマンドを使用して、現在のbashプロセスでリモートスクリプトの内容を実行することもできます。
eval "$(ssh remote-host cat script.bash)"
ただし、スクリプトを実行する前にスクリプトを完全にダウンロードしてメモリに保存します。
確実な解決策は次のとおりです。
. <(ssh remote-host cat script.bash)
しかし、いくつかのbashバージョンに問題があることに注意してください。
答え2
スクリプトを含むリモートファイルシステムのマウントsshfs。これにより、スクリプトが実行方法を知っているローカルファイルになります。
mkdir /path/to/remote-host
sshfs remote-host:/ /path/to/remote-host
/path/to/remote-host/path/to/script
答え3
これは古い質問ですが、Google の最初の再生回数に表示されたため、数年後に更新されます。
scpを使用すると、1行でこれを行うことができます。
scp remote-host@/full-path/script.sh . && ./script.sh
ファイルはリモートホストから現在の作業ディレクトリにコピーされ、現在の作業ディレクトリで実行されます。