SSHとリダイレクト

SSHとリダイレクト

次のコマンドを考えてみましょう。

ssh aristotle sudo /bin/sh < test.sh

リダイレクトを適用したいのです/bin/shが、sudo によって消費されてしまいます。目的を達成する方法について何かアイデアはありますか?

答え1

test.sh をコピーして呼び出すだけではダメですか?

scp test.sh aristotle:/tmp/test.$$.sh
ssh aristotle sudo /bin/sh /tmp/test.$$.sh
ssh aristotle rm /tmp/test.$$.sh

$$ はローカル マシン上のプロセスの PID であり、ある程度のランダム性を持たせることで、ファイルが破壊されないようにします。

答え2

リダイレクションssh および sudo で動作します。ssh および/または sudo からのパスワード ダイアログにのみ干渉します。

したがって、リダイレクトを使用しないか、たとえばスクリプトを最初にターゲットマシンにコピーしてから実行するなどの回避策を使用します(たとえば@edoloughlin提案された)。

または、パスワードを要求しないように ssh と sudo を設定します。すると、うまく動作します。

$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell

パスワードなしの ssh の使い方を説明するハウツーは何千もあるので、その部分は説明しません。また、sudo については、パスワードなしで使用する方法がいくつかあります。@jtimberman提案された問題のユーザーにパスワードなしのsudoを許可する(sudoのNOPASSWD機能を介して、sudoers(5))。

私は個人的にPAMモジュールを使用していますpam-ssh-エージェントこれによってsudoは転送されたsshエージェントに対して認証することができ、sshエージェントが利用できない場合にのみパスワードベースの認証にフォールバックします。DebianとUbuntuでは

apt-get install pam-ssh-agent-auth

そして、以下の文書に従って設定します。pam_ssh_agent_auth(8)

答え3

次の方法を試してください:

ssh aristotle sudo /bin/sh -c "/bin/sh \\< test.sh"

答え4

ssh somehost sudo cat \< /etc/passwdある程度成功しました。次のようなものを試してみてください:

ssh aristotle sudo /bin/sh \< test.sh

関連情報