ローカルネットワークで仮想マシンをアップグレードするためのスクリプトを開発しようとしています。目的は、各仮想マシンにスクリプトをダウンロードして実行させることです。
カールを使用してスクリプトをダウンロードして実行できましたが、まだ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
デフォルトではいくつかのオプションがあり、各オプションには長所と短所があります。これは、ネットワークの「基本」の程度とソリューションの耐久性によって多少異なります。
パスワードのないsudo。ユーザーがターゲットシステムでパスワードのないsudoを使用できるようにします。すべてに適用するか(
put "nameofuser ALL=(ALL) NOPASSWD: ALL
ターゲットマシンで使用される/etc/sudoers
)、特定のコマンドのみを許可します。ターゲットマシンへのアクセス権を持つすべての人visudo
はnameofuser
実際にそのマシンへのルートアクセス権を持っています(@terdonがコメントで提案したように、マシンのすべての人がルートアクセス権を持っているわけではありません)。制御コンピュータのユーザーがターゲットコンピュータにrootとしてSSH経由で接続できるようにします。制御するユーザーの公開鍵を
authorized_keys
ターゲットコンピュータのファイルに保存します。これは、制御システムの特定のユーザーがすべての仮想マシンにrootアクセス権を持っていることを意味します。Ansible(またはPuppet、Chefなど)を見てください。彼らはあなたのためにこの問題をある程度解決しました。 Ansibleは学習曲線が緩やかです(実際には1日で使用できます)。
問題が長期間続く場合は、オプション3を選択してください。独自のローカルネットワークでのみ実験する場合は、オプション1またはオプション2を選択してください。