リモートサーバーでsudoコマンドを実行するコマンドで終わる長いbashスクリプトがあります。
10 hours of local processing
…
ssh user@ip "sudo ls"
私はサーバーに接続するためにSSHキーを設定しましたが、うまくいきますが、sudoコマンドを実行するのに十分ではありません。また、このコマンドはスクリプトの末尾にあるため、sudoパスワードの対話型プロンプトを待ちたくありません。理想的には、スクリプトの先頭にパスワードの入力を求め、このパスワードを変数に保存してから、この変数をsshコマンドに渡してリモートサーバーでsudoコマンドを実行したいと思います。
これが私が付いているところです。私はこれについての多くの記事を読んだが、その半分はこれを使用することを提案した。
ssh $HOST 'echo $PASSWORD | sudo -S $COMMMAND'
これは私のパスワードを公開するので危険です。
これが実際に唯一の2つの解決策ですか?
ベストアンサー1
起動時に追加できsudo --validate
、起動時にパスワードを要求し、15分間キャッシュ(デフォルト)します。
編集して/etc/sudoers
例外(パスワードなしで実行できるコマンド)を追加できます。 (適切ではない可能性があります。)
プロセス全体をルートとして実行し、権限を削除してサブシェルを実行できます。ルートシェルは、そのタスクを実行する前にサブシェルが完了するのを待ちます。
ルートとして接続できるように、ルートのSSHキーを追加してください。