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

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

ssh user@server "sudo script"

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

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, а затем выполнит команду правильно.