script – SSH: sudoコマンドを実行

remote script ssh sudo

私は、ある場所で別のマシン(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


タイトルとURLをコピーしました