web-dev-qa-db-ja.com

リモートサーバーで非対話的にbashスクリプトを実行する

正確に3つの引数を受け入れるbashスクリプトがあり、PHPにWebインターフェイスを作成して、リモートサーバーでこのスクリプトを実行します。ユーザーは、ユーザー名ホストとリモートサーバーのパスワードを入力するだけです。

リモートサーバーでbashスクリプトを実行する次のコマンドを見つけました。

ssh root@Host 'bash -s' < script.sh

ただし、このコマンドはパスワードの入力を要求し、引数も使用しません。しかし、非インタラクティブに実行できるものが必要です。

何かのようなもの:

ssh root@Host -password="password" 'bash -s' < script.sh
6
Amarjit Singh

セキュリティに関する考慮事項を必ず読んでください


sshpassをインストールします。これは非対話型のsshパスワード認証のためのツールです。

Sudo apt install sshpass

次のように使用できます。

sshpass -p 'password' ssh user@server/IP

次に、次のように使用して、引数を指定してスクリプトを実行します。

sshpass -p 'password' ssh user@server "bash -s" < ./script.sh arg1 arg2

うまくいかなかった場合は、scpを使用してスクリプトをリモートサーバーに移動し、コマンドを実行してスクリプトを削除することをお勧めします。

sshpass -p 'password' scp script.sh user@server:/tmp/script.sh
sshpass -p 'password' ssh user@server /tmp/script.sh arg1 ar2 arg3
sshpass -p 'password' ssh user@server rm /tmp/script.sh

セキュリティに関する考慮事項 [man sshpass]

何よりもまず、sshpassのユーザーは、パスワードを対話形式で取得することだけにsshが固執するのは理由がないわけではないことを認識する必要があります。パスワードを安全に保存することはほぼ不可能であり、sshpassのユーザーは、sshの公開キー認証が同じエンドユーザーエクスペリエンスを提供するかどうかを検討する必要があります。

-pオプションは、sshpassのすべてのオプションの中で最も安全性が低いと見なされる必要があります。すべてのシステムユーザーは、単純な「ps」コマンドを使用してコマンドラインでパスワードを確認できます。 Sshpassはパスワードを隠すための最小限の試みを行いますが、そのような試みは実際に問題を解決することなく競合状態を作成する運命にあります。 sshpassのユーザーは、他のパスワード受け渡し手法のいずれかを使用することをお勧めします。これらの手法はすべて安全です。

特に、パスワードをプログラムで伝達することを目的としたプログラムを作成する人は、匿名パイプを使用し、-dオプションを使用してパイプの読み取り端をsshpassに渡すことをお勧めします。

6
Ravexina