servidor - forma correcta de sudo sobre ssh
restringir acceso ssh por ip (6)
Tengo un script que ejecuta otro script a través de SSH en un servidor remoto usando sudo. Sin embargo, cuando escribo la contraseña, aparece en la terminal. (De lo contrario, funciona bien)
ssh user@server "sudo script"
¿Cuál es la forma correcta de hacerlo así que puedo escribir la contraseña para sudo sobre SSH sin que aparezca la contraseña mientras escribo?
Dependiendo de su uso, tuve éxito con lo siguiente:
ssh root@server "script"
Esto solicitará la contraseña de root y luego ejecutará el comando correctamente.
Enfrenté un problema,
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
Entonces probé con
#1
vim /etc/sudoers
Defaults:user1 !requiretty
no funcionó
#2
user1 ALL=(user2) NOPASSWD: ALL
eso funcionó correctamente!
La mejor manera es ssh -t user@server "sudo <scriptname>"
, por ejemplo ssh -t user@server "sudo reboot"
. Primero pedirá una contraseña al usuario y luego a la raíz (ya que estamos ejecutando la secuencia de comandos o el comando con privilegios de administrador).
Espero que haya ayudado y aclarado tu duda.
Otra forma es usar el -t
para ssh
:
ssh -t user@server "sudo script"
Ver 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.
NOPASS
en la configuración en su máquina objetivo es la solución. Continúa leyendo en http://maestric.com/doc/unix/ubuntu_sudo_without_password
Suponiendo que no quiere un aviso de contraseña :
ssh $HOST ''echo $PASSWORD | sudo -S $COMMMAND''
Ejemplo
ssh me@localhost ''echo secret | sudo -S echo hi'' # outputs ''hi''