web-dev-qa-db-ja.com

Sudoコマンドを実行するためにパスワードをリモートサーバーに安全に渡す方法

私は非常に長いbashスクリプトを持っています、それの最後にリモートサーバーでSudoコマンドを実行するコマンドがあります:

10 hours of local processing
…
ssh user@ip "Sudo ls"

サーバーに接続するためにsshキーを設定しましたが、機能していますが、Sudoコマンドを実行するだけでは不十分です。また、このコマンドはスクリプトの最後にあるため、Sudoパスワードのインタラクティブなプロンプトを待ちたくありません。理想的には、スクリプトの最初にパスワードの入力を求め、このパスワードを変数に保存してから、この変数をsshコマンドに渡して、リモートサーバーでSudoコマンドを実行します。

これは私が立ち往生しているところです。私はそれについて無数の投稿を読みましたが、それらの半分はこれを使用することを提案しています:

ssh $Host 'echo $PASSWORD | Sudo -S $COMMMAND'

これは私のパスワードを公開するので危険であり、それらの半分はリモートサーバー上のSudoコマンドのパスワードの必要性を禁止することを提案しています。

これらは本当に2つの解決策だけですか?

2
Sulli

開始にSudo --validateを追加すると、開始時にパスワードの入力を求められ、(デフォルトで)15分間キャッシュされます。

/etc/sudoersを編集して、例外(パスワードなしで実行できるコマンド)を追加できます。 (これは適切でない場合があります。)

すべてをrootとして実行することもできますが、特権を削除してサブシェルを実行すると、ルートシェルはサブシェルが終了するのを待ってから少しずつ実行します。

ルートとして接続できるように、ルートにsshキーを追加します。

1
ctrl-alt-delor