usuario script permisos password pasar parámetro para ejecutar dar contraseña con como comando clave cambiar linux ssh sudo su

linux - script - ¿Cómo pasar la contraseña a su/sudo/ssh sin anular el TTY?



sudo-i comando (20)

Estoy escribiendo un programa C Shell que hará su o sudo o ssh . Todos quieren sus contraseñas en la entrada de la consola (TTY) en lugar de stdin o la línea de comando.

¿Alguien sabe una solución?

Configurar sudo sin contraseña no es una opción.

expect podría ser una opción, pero no está presente en mi sistema simplificado.


¿Tal vez puedas usar un comando de expect ?:

expect -c ''spawn ssh [email protected];expect password;send "your-password/n";interact

Ese comando da la contraseña automáticamente.


Configure SSH para Autenticación de clave pública, sin frase en la clave. Un montón de guías en la red. No necesitará una contraseña para iniciar sesión en ese momento. A continuación, puede limitar las conexiones para una clave según el nombre de host del cliente. Proporciona seguridad razonable y es ideal para inicios de sesión automáticos.


Cuando no hay mejor opción (como lo sugirieron otros), entonces el hombre socat puede ayudar:

(sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) | socat - EXEC:''ssh -l user server'',pty,setsid,ctty EXEC’utes an ssh session to server. Uses a pty for communication between socat and ssh, makes it ssh’s controlling tty (ctty), and makes this pty the owner of a new process group (setsid), so ssh accepts the password from socat.

Toda la complejidad pty, setsid, ctty es necesaria y, si bien es posible que no necesite dormir tanto tiempo, necesitará dormir. También vale la pena echar un vistazo a la opción echo = 0, al igual que pasar el comando remoto en la línea de comando de ssh.


Eche un vistazo a la utilidad esperada de Linux.

Le permite enviar salida a stdio en base a la coincidencia de patrones simples en stdin.


Escribí Applescript que solicita una contraseña a través de un cuadro de diálogo y luego crea un comando bash personalizado, como este:

echo <password> | sudo -S <command>

No estoy seguro si esto ayuda.

Sería bueno si sudo aceptara una contraseña pre-encriptada, así podría encriptarla dentro de mi script y no preocuparme por repetir las contraseñas de texto claro. Sin embargo, esto funciona para mí y mi situación.


Esto puede hacerse configurando claves públicas / privadas en los hosts objetivo a los que se conectará. El primer paso sería generar una clave ssh para el usuario que ejecuta el script en el host local, ejecutando:

ssh-keygen Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default> Overwrite (y/n)? y

Luego ingrese una contraseña en blanco. Después de eso, copie su clave ssh en el host de destino al que se conectará.

ssh-copy-id <remote_user>@<other_host> remote_user@other_host''s password: <Enter remote user''s password here>

Después de registrar las claves ssh, podría realizar un ssh remote_user@other_host desde su host local.


La codificación de una contraseña en un script de espera es lo mismo que tener un sudo sin contraseña, en realidad peor, ya que sudo al menos registra sus comandos.


La solución habitual a este problema es establecer una aplicación de ayuda que realiza la tarea que requiere acceso de superusuario: http://en.wikipedia.org/wiki/Setuid

Sudo no está destinado a ser usado fuera de línea.

Edición posterior: SSH se puede usar con autenticación de clave privada-pública. Si la clave privada no tiene una frase de contraseña, ssh se puede usar sin pedir una contraseña.


Para ssh puede usar sshpass : sshpass -p yourpassphrase ssh user@host .

Solo necesitas descargar sshpass primero :)

$ apt-get install sshpass $ sshpass -p ''password'' ssh username@server


Para sudo hay una opción -S para aceptar la contraseña de la entrada estándar. Aquí está la entrada del hombre:

-S The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.

Esto le permitirá ejecutar un comando como:

echo myPassword | sudo -S ls /tmp

En cuanto a ssh, hice muchos intentos para automatizar / guiar su uso sin éxito. No parece haber ninguna forma de incorporar la contraseña en el comando sin preguntar. Como han mencionado otros, la utilidad " expect " parece estar dirigida a abordar este dilema, pero en última instancia, establecer la autorización correcta de clave privada es la forma correcta de proceder cuando se intenta automatizar esto.


Para sudo puedes hacer esto también:

sudo -S <<< "password" command


Puede proporcionar una contraseña como parámetro para esperar el script.


Sobre la base de la respuesta de @Jahid, esto funcionó para mí en macOS 10.13:

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers


Tengo:

ssh user@host bash -c "echo mypass | sudo -S mycommand"

Funciona para mi.


UTILIZAR:

echo password | sudo command

Ejemplo:

echo password | sudo apt-get update; whoami

Espero eso ayude..



Yo tuve el mismo problema. secuencia de comandos de diálogo para crear un directorio en la PC remota. el diálogo con ssh es fácil. Yo uso sshpass (previamente instalado).

dialog --inputbox "Enter IP" 8 78 2> /tmp/ip IP=$(cat /tmp/ip) dialog --inputbox "Please enter username" 8 78 2> /tmp/user US=$(cat /tmp/user) dialog --passwordbox "enter password for /"$US/" 8 78 2> /tmp/pass PASSWORD = $(cat /tmp/pass) sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER rm /tmp/ip rm /tmp/user rm /tmp/pass

saludos desde Alemania

titus


echo <password> | su -c <command> <user>

Esto está funcionando.


ssh -t -t [email protected] << EOF echo SOMEPASSWORD | sudo -S do something sudo do something else exit EOF


su -c "Command" < "Password"

Espero que sea útil.