неинтерактивный ssh ​​sudo… запрашивает пароль в виде обычного текста

9

Я бегу некоторые неинтерактивные команды SSH. С ssh-аутентификацией все в порядке через ssh-агент, но если я запускаю команду, требующую sudo, тогда запрос пароля в моем терминале будет простым текстом. Например:

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

подскажет мне пароль в текстовом виде. Кто-нибудь знает, как я могу заставить его использовать обычную безопасную подсказку или что я могу передать пароль через коммутатор? (как тогда, я могу настроить безопасное приглашение на этой стороне, прежде чем отправить команду)

Буду признателен за любую оказанную помощь.

Iain
источник

Ответы:

13

Используйте ssh -t:

человек сш

-t   Force pseudo-tty allocation. This can be used to execute arbitrary 
     screen-based programs on a remote machine, which can be very useful, 
     e.g. when implementing menu services. Multiple -t options force tty 
     allocation, even if ssh has no local tty.

Так что ваша команда будет

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

Если вы не хотите вводить пароль, вы можете (если вам разрешено) изменить sudoersс помощью команды visudo.

Добавить параметр NOPASSWD:, например

username ALL=(ALL) NOPASSWD: /bin/mkdir

Если вы не можете редактировать / etc / sudoers, вы можете использовать sudo -S:

человек судо

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

С этим команда будет

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

Помните, что это добавит ваш пароль к истории команд вашей оболочки (с bash, это будет ~/.bash_historyфайл).

Олли
источник