правильный способ sudo через ssh


У меня есть скрипт, который запускает другой скрипт через SSH на удаленном сервере с помощью sudo. Однако, когда я набираю пароль, он появляется на терминале. (В противном случае он отлично работает)

ssh user@server "sudo script"

каков правильный способ сделать это, чтобы я мог ввести пароль для sudo через SSH без пароля, появляющегося при вводе?

6 98

6 ответов:

другой способ-использовать -t переключатель ssh:

ssh -t user@server "sudo script"

см.http://linuxcommand.org/man_pages/ssh1.html:

 -t      Force pseudo-tty allocation.  This can be used to execute arbi-
         trary 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 $HOST 'echo $PASSWORD | sudo -S $COMMMAND'

пример

ssh me@localhost 'echo secret | sudo -S echo hi' # outputs 'hi'

NOPASS в конфигурации на вашей целевой машине есть решение. Продолжить чтение на http://maestric.com/doc/unix/ubuntu_sudo_without_password

лучший способ-это ssh -t user@server "sudo <scriptname>", например ssh -t user@server "sudo reboot". Сначала он запросит пароль для пользователя, а затем root(поскольку мы запускаем скрипт или команду с правами root.

Я надеюсь, что это помогло и очистили ваши сомнения.

я столкнулся с проблемой,

user1@server1$ ssh -q user1@server2 sudo -u user2 rm -f /some/file/location.txt

Output:
sudo: no tty present and no askpass program specified

тогда я попробовал с

#1
vim /etc/sudoers
Defaults:user1    !requiretty

не работает

#2
user1   ALL=(user2)         NOPASSWD: ALL

это сработало правильно!

в зависимости от вашего использования, я имел успех со следующим:

ssh root@server "script"

это будет запрашивать пароль root, а затем выполнить команду правильно.