usar servidor pública por password para misma linea entrar contraseña conectarse con como comandos comando clave autenticación linux shell ssh openssh

linux - servidor - Ingrese automáticamente la contraseña de SSH con la secuencia de comandos



ssh comando en linux (13)

sshpass combinado con autossh

Una buena ventaja del ya mencionado sshpass es que puedes usarlo con autossh , eliminando aún más la ineficiencia interactiva.

sshpass -p mypassword autossh -M0 -t [email protected]

Esto permitirá la reconexión automática si, por ejemplo, su wifi se interrumpe al cerrar su computadora portátil.

Necesito crear una secuencia de comandos que ingrese automáticamente una contraseña para el cliente OpenSSH ssh .

Digamos que necesito SSH en myname@somehost con la contraseña a1234b .

Ya lo intenté ...

#~/bin/myssh.sh ssh myname@somehost a1234b

...Pero esto no funciona.

¿Cómo puedo obtener esta funcionalidad en un script?


sshpass con mejor seguridad

Me tropecé con este hilo mientras buscaba una manera de entrar en un servidor empantanado: me tomó más de un minuto procesar el intento de conexión SSH, y agotó el tiempo de espera antes de poder ingresar una contraseña. En este caso, quería poder proporcionar mi contraseña de inmediato cuando el mensaje estaba disponible.

(Y si no es dolorosamente claro: con un servidor en este estado, es demasiado tarde para configurar un inicio de sesión con clave pública).

sshpass al rescate. Sin embargo, hay mejores formas de sshpass -p que con sshpass -p .

Mi implementación salta directamente a la solicitud de contraseña interactiva (no se pierde tiempo viendo si puede ocurrir el intercambio de claves públicas), y nunca revela la contraseña como texto sin formato.

#!/bin/sh # preempt-ssh.sh # usage: same arguments that you''d pass to ssh normally echo "You''re going to run (with our additions) ssh $@" # Read password interactively and save it to the environment read -s -p "Password to use: " SSHPASS export SSHPASS # have sshpass load the password from the environment, and skip public key auth # all other args come directly from the input sshpass -e ssh -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no "$@" # clear the exported variable containing the password unset SSHPASS


Después de buscar una respuesta para la pregunta durante meses, finalmente encuentro la mejor solución: escribir un guión simple.

#!/usr/bin/expect set timeout 20 set cmd [lrange $argv 1 end] set password [lindex $argv 0] eval spawn $cmd expect "assword:" send "$password/r"; interact

Ponlo en /usr/bin/exp , luego puedes usar:

  • exp <password> ssh <anything>
  • exp <password> scp <anysrc> <anydst>

¡Hecho!



Lo hice funcionar de la siguiente manera

.ssh / config se modificó para eliminar el mensaje sí / no - Estoy detrás de un firewall así que no me preocupan las claves ssh falsificadas

host * StrictHostKeyChecking no

Crea un archivo de respuesta para esperar, es decir, answer.expect

set timeout 20 set node [lindex $argv 0] spawn ssh root@node service hadoop-hdfs-datanode restart expect "*?assword { send "password/r" <- your password here. interact

Crea tu script bash y solo espera en el archivo

#!/bin/bash i=1 while [$i -lt 129] # a few nodes here expect answer.expect hadoopslave$i i=[$i + 1] sleep 5 done

Obtiene 128 nodos de datos de hadoop actualizados con nueva configuración, suponiendo que esté utilizando un montaje NFS para los archivos hadoop / conf

Espero que esto ayude a alguien. ¡Soy un idiota de Windows y me tomó alrededor de 5 horas descubrirlo!


Para conectar una máquina remota a través de scripts de shell, use el siguiente comando:

sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no USERNAME@IPADDRESS

donde IPADDRESS , USERNAME y PASSWORD son valores de entrada que deben proporcionarse en script, o si queremos proporcionar en tiempo de ejecución use el comando "leer".


Para que el intercambio de claves funcione desde una unidad de almacenamiento, debe copiar su clave privada en la unidad y especificarla en su comando ssh (para evitar el uso de la clave privada de cuentas locales), por ejemplo:

ssh -i id_rsa host

Alternativamente, puede usar expect (que es un script separado del shell). Aquí hay una pregunta previa sobre SSH y esperar .

Tenga en cuenta que cualquier persona podrá abrir el script de espera y ver las credenciales de inicio de sesión en texto sin formato.


Podría usar un script de espera. No he escrito uno en bastante tiempo, pero debería verse a continuación. Tendrá que encabezar el script con #! / Usr / bin / expect

#!/usr/bin/expect -f spawn ssh HOSTNAME expect "login:" send "username/r" expect "Password:" send "password/r" interact


Primero necesita instalar sshpass .

  • Ubuntu / Debian: apt-get install sshpass
  • Fedora / CentOS: yum install sshpass
  • Arco: pacman -S sshpass

Ejemplo:

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM

Ejemplo de puerto personalizado:

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400

Notas:

  • sshpass también puede leer una contraseña de un archivo cuando se pasa el sshpass -f .
    • El uso de -f evita que la contraseña sea visible si se ejecuta el comando ps .
    • El archivo en el que se almacena la contraseña debe tener permisos seguros.


Use la autenticación de clave pública: https://help.ubuntu.com/community/SSH/OpenSSH/Keys

En el host de origen, ejecute esto solo una vez:

ssh-keygen -t rsa # ENTER to every field ssh-copy-id myname@somehost

Eso es todo, después de eso podrás hacer ssh sin contraseña.


Variante I

sshpass -p PASSWORD ssh USER@SERVER

Variante II

#!/usr/bin/expect -f spawn ssh USERNAME@SERVER "touch /home/user/ssh_example" expect "assword:" send "PASSWORD/r" interact


# create a file that echo''s out your password .. you may need to get crazy with escape chars or for extra credit put ASCII in your password... echo "echo YerPasswordhere" > /tmp/1 chmod 777 /tmp/1 # sets some vars for ssh to play nice with something to do with GUI but here we are using it to pass creds. export SSH_ASKPASS="/tmp/1" export DISPLAY=YOURDOINGITWRONG setsid ssh [email protected] -p 22

referencia: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card