埋め込みスクリプトからリモートマシンで一連の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を尊重する埋め込みスクリプトのファイルの終わりを指定して、最初のスクリプトを取得するにはどうすればよいですか?
最初のものでは、tty
は端末に接続されていないため、ssh
のstdin
はありません。これはhereファイルです。実際、(Debianで)同様のコマンドを実行しようとすると、次のエラーが発生します。
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
置換プログラムも機能します。