私は、ある場所で別のマシン(Ubuntuベース)にsshして、rootとして何かを実行する必要があるインタラクティブなシェルスクリプトを持っています(ユーザーは彼のパスワードを入力する必要がありますが、リモートコマンドはスクリプトに記載されているように実行する必要があります)
# ...
ssh remote-machine 'sudo ls'
# ...
しかし、いつもこのエラーメッセージが返ってきます
sudo: no tty present and no askpass program specified
OK、それは非常に明確です。しかし、これを回避するにはどうすればいいのでしょうか?こんなことが起こるはずです
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
46 Boldewyn 2010-03-09
驚異的な ssh
には、すべてを解決する治療法があります。ポイントは、-t
フラグを追加して、sshに強制的に擬似ttyを割り当てさせることです
ssh -t remote-server 'sudo ls'
53 Boldewyn 2010-03-09
この方法では、sshの後にsudoを使って1つのスクリプトを実行します
ここでは、sudo 機能を持つ “リモート” ユーザーがいて、root として実行させたいスクリプトがあるとします
1) /etc/passwd にログイン時に使用するスクリプトを設定します
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) “login.sh “の中で、実行したいスクリプトを “sudo “として実行します
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
#Not running as root, so we execute "sudo"
sudo /usr/local/bin/script.sh
else
#We are already rooted, so "sudo" is not required.
/usr/local/bin/script.sh
fi
exit;
通常はsshログイン+sudoの2回パスワードを聞いてきます。1回だけ入力したい場合は、sudo without passwordを試してみてください(お勧めしません)。 <– Boldewynのコメントを読んでください
最大の利点は、「ssh」は他のパラメータを必要としないこと(-tのように)、サーバ側ではsudoが強制的に実行されることです。また、スクリプトが終了すると、ユーザも同様にログアウトされます
そこまでエレガントではないかもしれませんが、シンプルで機能しています
0 lepe 2015-09-07
以下のコマンドを実行することで、インタラクティブな操作なしに root アクセスを取得することができます
ssh server " sudo command" < sudopassword.txt
-1 SilentGuy 2016-04-15