「sudo:申し訳ありません。リモートスクリプトでsudoを使用するときにsudoを実行するにはttyが必要です。」

「sudo:申し訳ありません。リモートスクリプトでsudoを使用するときにsudoを実行するにはttyが必要です。」

組み込みスクリプトを介してリモートコンピュータで一連のsudoプロモーションコマンドを実行したいと思います。問題を単純化するために、先ほどsudo idを実行してみて、それがルートであることを知らせました。

このスクリプトを実行すると、「sudo:申し訳ありません。sudoを実行するにはttyが必要です」というメッセージが表示されます。

#!/bin/bash
ssh -t 192.168.1.100<<EOF
sudo id
EOF

しかし、これを実行すると、次のことは起こりません。

#!/bin/bash
ssh -t 192.168.1.100 sudo id

埋め込みスクリプトのファイルの終わりがSSHのもう一方の端に強制ttyを指定する最初のものはどのように得られますか?

答え1

最初のファイルは端末に接続されていないため、ttyfor がなく、ここにあるファイルです。実際にDebianで同様のコマンドを実行しようとすると、次のエラーが発生します。sshstdin

stdin が端末ではないため、疑似端末は割り当てられません。

機能させるには、次のようにします。

ssh -tt 192.168.1.100 <<EOF
sudo -S id
password
EOF

パスワードがプレーンテキストになっているので、これは良い考えではありません。

修正する

私はパスワードをプレーンテキストにエンコードしない簡単な解決策を見つけました。グラフィックプログラムを使用してパスワードを入力できます。

ssh -X 192.168.1.100 <<EOF
SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A id
EOF

もちろん、ssh-askpassプログラムは指定された場所にインストールされており、使用しているコンピュータでXセッションが実行されている必要があります。このプログラムにはssh-askpass動作する必要があるいくつかのバリエーションがあります(Gnome / KDEバージョン)。または、同じグラフィックス置換プログラムがsudo作業を実行する必要があります。gksukdesudo

関連情報