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 без пароля в целом (через NOPASSWDфункцию sudo, см.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

Связанный контент