web-dev-qa-db-ja.com

ssh -tを介してリモートでSudoコマンドを実行する方法は?

ssh -tを介してリモートホストにログインし、Sudo service foo restartを使用するスクリプトがあります。

要件は、リモートホストでのパスワードのプロンプトを回避することです。リモートホストはSSH証明書を介して認証します。リモートホストのsudoersファイルにより、そのユーザーはNOPASSWDを使用してサービスコマンドを実行できます。

ただし、テスト中はパスワードの入力を求められ、これは受け入れられません。これを-tフラグなしで手動で実行すると、機能します。ただし、-tフラグはすべてをスローします。

これを回避する方法はありますか?

4
dperry1973

requirettysudoersオプションを無効にしてsshwithout the -tフラグ(または-T)は機能します。

次のようなものをsudoersに追加します(テストされていません):

Defaults:{your ssh user} !requiretty

これを、すでに使用しているNOPASSWDと組み合わせると、疑似ttyを割り当てなくてもSudoコマンドを実行できるはずです。

ユーザーの代わりにコマンドのrequirettyを変更することもできます。

4
sierrasdetandil

SSHキーを生成し、それをリモートホストに転送します。

  1. 次のコマンドを使用して、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
    
  2. 検索/root/.ssh/id_rsa.pubおよび次のコマンドを使用して、そのキーをリモートに転送します。

    ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote:/root
    

ログインしてみてください。リモートパスワードは要求されません。

0

私にとってはこのようにうまくいきましたが、次の点に注意してくださいstdinは端末ではないため、疑似端末は割り当てられません

ssh -t username@hostname1 << 'EOS'
Sudo sh
hostname
EOS

Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname1
0
Ragnar Lodbrog