リモートでスクリプトを実行するには、sudoパスワードを入力してください。

リモートでスクリプトを実行するには、sudoパスワードを入力してください。

ローカルネットワークで仮想マシンをアップグレードするためのスクリプトを開発しようとしています。目的は、各仮想マシンにスクリプトをダウンロードして実行させることです。

カールを使用してスクリプトをダウンロードして実行できましたが、まだsudoパスワードの入力を求められます。

これは働きます:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | sudo sh'

ただし、sudoコマンドに達した場合は、まだパスワードを再入力する必要があります。

私は以前試しました:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | echo 'password' | sudo sh'

次のプロンプトが表示されます。

[sudo] password for aaron: (23) Failed writing body

sudoパスワードプロンプトにパスワードを渡すにはどうすればよいですか?

答え1

デフォルトではいくつかのオプションがあり、各オプションには長所と短所があります。これは、ネットワークの「基本」の程度とソリューションの耐久性によって多少異なります。

  1. パスワードのないsudo。ユーザーがターゲットシステムでパスワードのないsudoを使用できるようにします。すべてに適用するか(put "nameofuser ALL=(ALL) NOPASSWD: ALLターゲットマシンで使用される/etc/sudoers)、特定のコマンドのみを許可します。ターゲットマシンへのアクセス権を持つすべての人visudonameofuser実際にそのマシンへのルートアクセス権を持っています(@terdonがコメントで提案したように、マシンのすべての人がルートアクセス権を持っているわけではありません)。

  2. 制御コンピュータのユーザーがターゲットコンピュータにrootとしてSSH経由で接続できるようにします。制御するユーザーの公開鍵をauthorized_keysターゲットコンピュータのファイルに保存します。これは、制御システムの特定のユーザーがすべての仮想マシンにrootアクセス権を持っていることを意味します。

  3. Ansible(またはPuppet、Chefなど)を見てください。彼らはあなたのためにこの問題をある程度解決しました。 Ansibleは学習曲線が緩やかです(実際には1日で使用できます)。

問題が長期間続く場合は、オプション3を選択してください。独自のローカルネットワークでのみ実験する場合は、オプション1またはオプション2を選択してください。

関連情報