web-dev-qa-db-ja.com

Sudosuにパスワードを渡す

リモートサーバーにSSH接続した後、別のユーザーにSudoを実行したかったので、次のことを試しました。

cat remote-test.sh
ssh -t -t [email protected] 'bash -s' << EOF
  /tmp/test.sh
EOF

development-server.netからremote-test.shを実行するとき、abcuserとしてtest-server.netにsshし、次にxyzuserとしてSudoにsshしたかった。

cat /tmp/test.sh

echo "password" | Sudo -S su - xyzuser
cd /tmp/some/directory

スクリプトでSudosuを実行しているときに、パスワードを渡す方法を誰かにアドバイスしてもらえますか?.

3
phani

password-less ssh to localhost as user xyzuser for abcuserを設定して、目的を達成します。 abcuserの公開鍵をxyzuserのauthorized_keyとして追加する必要があります。

次に、abcuserとしてログインすると、次のことができます。

ssh xyzuser@localhost do_something_as_xyzuser

xyzuserへのsshアクセスをブロックした場合は、ループバックを介してのみ許可してください。 Linuxを使用している場合は、その方法について/etc/security/access.confまたは同等のものを参照してください。

2
jman

suを使用してドロップし、正しい権限でSudoを構成します。それには編集が含まれます/etc/sudoersそしてユーザーがパスワードを提供せずにコマンドを実行できるようにするためのエントリを追加します。

あなたはそれを少し高度にすることができます

User_Alias SCRIPT_USER johndoe
Cmnd_Alias SCRIPT_PATH /usr/local/bin/myscript.sh

SCRIPT_USER ALL = NOPASSWD: SCRIPT_PATH

または、1行で同じものを取得します。

johndoe ALL = NOPASSWD: /usr/local/bin/myscript.sh
2
pkhamre

私はhighly@ pkhamre(適切に構成されたsudoersファイル)によって提案されたソリューションを使用することをお勧めします。これは最良のオプションであり、管理者に最大限の制御を提供します。

それが達成できない場合は、@ skjaidev(sshauthorized_keys)のソリューションを使用することをお勧めします。これには、管理者権限は必要ありません。両方のアカウントへのアクセスのみが必要なので、より多くの場合に適している可能性があります。

しかし、何らかの理由でこれらのソリューションのどちらもが機能しない場合...

次に、これに expect を使用します。おそらくすでにあなたのマシンにあります。これは、あらゆる種類のインタラクティブなコマンドライン自動化の標準ツールです。

1
Zac Thompson