ssh -t
経由でリモートホストにログインするスクリプトがありますsudo service foo restart
。
要件は、リモートホストにパスワードの入力を求められないようにすることです。リモートホストはSSH証明書を介して認証されます。このユーザーにはリモートホスト上のファイルがsudoers
許可されますNOPASSWD
。
ただし、テスト中にパスワードを入力するように求められましたが、これは許可されていません。-t
フラグなしで手動で実行すると機能します。しかし、-t
フラグはすべてをあまり重要にしません。
解決策はありますか?
答え1
requiretty
オプションを無効にして実行することもできます。sudoers
ssh
いいえフラグ-t
(またはおよび-T
)が有効です。
次のものを追加しますsudoers
(テストされていません)。
Defaults:{your ssh user} !requiretty
これをNOPASSWD
すでに使用しているコマンドと組み合わせると、pseudo-ttyを割り当てなくてもsudoコマンドを実行できます。
requiretty
ユーザーの代わりにコマンドを変更することもできます。
答え2
SSHキーを生成してリモートホストに送信します。
次のコマンドを使用してRSA SSHキーを生成します。
[root@localhost ~] ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Hit ENTER Enter passphrase (empty for no passphrase): Hit ENTER Enter same passphrase again: Hit ENTER
/root/.ssh/id_rsa.pub
キーを見つけてリモコンに送信するには、次のコマンドを使用します。ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote:/root
今ログインしてみてください。リモートパスワードを要求しません。
答え3
私にとってはこれはうまくいきますが、次のように警告してください。 stdin が端末ではないため、疑似端末は割り当てられません。
ssh -t username@hostname1 << 'EOS'
sudo sh
hostname
EOS
Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname1