GNU/Linux >> Linux の 問題 >  >> Linux

Ssh –パスワードなしでSudoを実行できる場合、Sudoを実行するにはTtyが必要ですか?

sudoを設定しました パスワードなしで実行しますが、 ssh'sudo Foo'を実行しようとすると 、まだエラーメッセージ sudoが表示されます:申し訳ありませんが、sudoを実行するにはttyが必要です

なぜこれが発生し、どうすれば回避できますか?

承認された回答:

これはおそらく、 / etc / sudoersが原因です。 ファイル(またはそれに含まれるファイル)には次のものがあります:

Defaults requiretty

…これにより、 sudo TTYが必要です。 Red Hatシステム(RHEL、Fedora…)は、デフォルトの sudoersでTTYを必要とすることが知られています。 ファイル。これは実際のセキュリティ上の利点を提供せず、安全に削除できます。

Red Hatはこの問題を認識しており、将来のリリースで削除される予定です。

サーバーの構成を変更することができない場合は、その構成ミスの回避策として、 -tを使用できます。 または-tt sshのオプション これはリモート側に疑似端末を生成しますが、いくつかの副作用があることに注意してください。

-tt インタラクティブな使用を目的としています。ローカル端末をrawに配置します リモート端末と対話するためのモード。つまり、 ssh I / Oは端末との間ではないため、副作用が発生します。たとえば、すべての入力がエコーバックされ、特殊な端末文字( ^? ^ C ^ U )特別な処理が発生します。出力時に、 LF sはCRLFに変換されます s…(このバイナリファイルが変更される理由に対するこの回答を参照してください。 詳細については。

影響を最小限に抑えるために、次のように呼び出すことができます:

ssh -tt host 'stty raw -echo; sudo ...' < <(cat)

<<(猫) raw でのローカル端末(存在する場合)の設定を回避します モード。そして、 stty raw -echoを使用しています リモート端末の回線規律をパススルーとして設定します(事実上、 -ttのない疑似端末の代わりに使用されるパイプのように動作します。 、ただし、それはそのコマンドが実行された後にのみ適用されるため、それが発生するまで入力用の何かの送信を遅らせる必要があります。

リモートコマンドの出力は端末に送信されるため、 TCP_NODELAY 以降、そのバッファリング(多くのアプリケーションではラインベースになります)と帯域幅効率に影響を与えることに注意してください。 オンになっています。 -ttも使用 、 ssh IPQoSをlowdelayに設定します スループットとは対照的に 。次の方法で両方を回避できます:

ssh -o IPQoS=throughput -tt host 'stty raw -echo; sudo cmd | cat' < <(cat)

また、リモートコマンドがそのstdinでファイルの終わりを検出できず、リモートコマンドのstdoutとstderrが単一のストリームにマージされることを意味することに注意してください。

関連:Debian – Debian 9 Stretchでのログイン時にユーザーとパスワードを削除しますか?

ですから、結局のところ、あまり良い回避策ではありません。

リモートホスト上に疑似端末を生成する方法がある場合( expected など) 、 zsh socat perl IO::Pty …)、それを使用して、 sudoを接続するための疑似端末を作成することをお勧めします。 to(ただし、I / O用ではありません)、および sshを使用します -tなし 。

たとえば、 expect

ssh host 'expect -c "spawn -noecho sh -c {
     exec sudo cmd >&4 2>&5 <&6 4>&- 5>&- 6<&-}
 exit [lindex [wait] 3]" 4>&1 5>&2 6<&0'

またはscript (ここでは、 util-linuxからの実装を想定しています ):

ssh host 'SHELL=/bin/sh script -qec "
              sudo cmd <&3 >&4 2>&5 3<&- 4>&- 5>&-
            " /dev/null 3<&0 4>&1 5>&2'

((両方の場合)リモートユーザーのログインシェルがBourneに似ていると仮定します。)


Linux
  1. Ssh –パスワードプロンプトなしでSsh-addを自動的に実行する方法は?

  2. TTY をオーバーライドせずに su/sudo/ssh にパスワードを渡す方法は?

  3. SSH パスワードを再入力せずに「git pull」を実行するにはどうすればよいですか?

  1. Podmanでsudoを使用せずにLinuxでコンテナを実行する

  2. パスワードなしでRHEL7サーバーにSSHログイン

  3. Ansible:パスワードなしの sudo

  1. パスワードプロンプトなしでルートとして特定のプログラムを実行する方法は?

  2. ユーザーがパスワードなしでSudoを使用できるようにしますか?

  3. SuなしでSudoによってrootパスワードを変更しますか?