組み込みスクリプトを介してリモートコンピュータで一連の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
最初のファイルは端末に接続されていないため、tty
for がなく、ここにあるファイルです。実際にDebianで同様のコマンドを実行しようとすると、次のエラーが発生します。ssh
stdin
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
作業を実行する必要があります。gksu
kdesudo