Necesito crear un script que ingrese automáticamente una contraseña para el ssh
cliente OpenSSH .
Digamos que necesito ingresar SSH myname@somehost
con la contraseñaa1234b
.
Ya lo he intentado ...
#~/bin/myssh.sh
ssh myname@somehost
a1234b
...Pero esto no funciona.
¿Cómo puedo obtener esta funcionalidad en un script?
ps -aux
, normalmente no debe ejecutar comandos escribiendo su contraseña porque otros usuarios en la misma computadora pueden ver la contraseña al ejecutarlaps -aux
. si es práctico, también desea utilizar la autenticación de clave pública, como se menciona en la otra respuesta. esto le permite separar la información de autenticación de su script para que pueda compartir su script con otras personas sin preocupaciones, y luego decidir habilitar el cifrado en su carpeta ~ / .ssh sin cifrar también su script.sshpass
.Después de buscar una respuesta para la pregunta durante meses, finalmente encontré una mejor solución: escribir un guión simple.
Póngalo en
/usr/bin/exp
, luego puede usar:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
¡Hecho!
fuente
Utilice 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:
Eso es todo, después de eso podrás hacer ssh sin contraseña.
fuente
Podría usar un script de espera. No he escrito uno en bastante tiempo, pero debería verse a continuación. Deberá encabezar el guión con
#!/usr/bin/expect
fuente
/bin/myssh.sh: 2: spawn: not found /bin/myssh.sh: 3: expect: not found /bin/myssh.sh: 4: send: not found /bin/myssh.sh: 5: expect: not found /bin/myssh.sh: 6: send: not found
which expect
#!/usr/bin/env expect
interact
al final para que la sesión ssh sea realmente interactivaVariante I
Variante II
fuente
-p
bandera es para especificar un número de puerto.SYNOPSIS sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
yum -y install epel-release
y luegoyum -y install sshpass
sshpass + autossh
Una buena ventaja de lo ya mencionado
sshpass
es que puede usarloautossh
, eliminando aún más la ineficiencia interactiva.Esto permitirá la conexión automática si, por ejemplo, su wifi se interrumpe al cerrar su computadora portátil.
fuente
-f
a autossh en esta combinación, porquewhen used with autossh, ssh will be *unable* to ask for passwords or passphrases.
harding.motd.ca/autossh/README.txt también superuser.com/questions/1278583/...~~V~~singular~~3rdsshpass
con mejor seguridadMe topé con este hilo mientras buscaba una forma de ingresar a un servidor atascado: me llevó más de un minuto procesar el intento de conexión SSH y agotó el tiempo de espera antes de que pudiera ingresar una contraseña. En este caso, quería poder proporcionar mi contraseña de inmediato cuando el aviso estuviera disponible.
(Y si no es dolorosamente claro: con un servidor en este estado, es demasiado tarde para configurar un inicio de sesión de clave pública).
sshpass
al rescate. Sin embargo, hay mejores formas de hacerlo quesshpass -p
.Mi implementación salta directamente a la solicitud de contraseña interactiva (no se pierde tiempo viendo si puede ocurrir un intercambio de clave pública), y nunca revela la contraseña como texto sin formato.
fuente
trap
evitar que ctrl-C filtre laSSHPASS
variablePreferredAuthentications=keyboard-interactive
no funcionó, pero reemplazarlo conPreferredAuthentications=password
trabajado.Así es como inicio sesión en mis servidores.
#! / bin / bash
sshpass -p mypassword ssh root @ $ 1
Y por lo tanto...
fuente
referencia: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card
fuente
No creo haber visto a nadie sugerir esto y el OP simplemente dijo "guión", así que ...
Necesitaba resolver el mismo problema y mi lenguaje más cómodo es Python.
Usé la biblioteca paramiko. Además, también necesitaba emitir comandos para los que necesitaría usar permisos escalados
sudo
. Resulta que sudo puede aceptar su contraseña a través de stdin a través de la bandera "-S". Vea abajo:Espero que esto ayude a alguien. Mi caso de uso fue crear directorios, enviar y descomprimir archivos e iniciar programas en ~ 300 servidores a la vez. Como tal, la automatización era primordial. Lo intenté
sshpass
,expect
y luego se me ocurrió esto.fuente
Obtuve esto funcionando de la siguiente manera
.ssh / config se modificó para eliminar el mensaje yes / no: estoy detrás de un firewall, así que no me preocupan las claves ssh falsas
Cree un archivo de respuesta para esperar, es decir, answer.expect
Cree su script bash y solo llame a wait en el archivo
Obtiene 128 nodos de datos hadoop actualizados con una nueva configuración, suponiendo que esté utilizando un montaje NFS para los archivos hadoop / conf
Espero que esto ayude a alguien: soy un Windows numpty y esto me tomó alrededor de 5 horas para descubrirlo.
fuente
Si está haciendo esto en un sistema Windows, puede usar Plink (parte de PuTTY).
fuente
Tengo una mejor solución que incluye el inicio de sesión con su cuenta que cambiar a usuario root. Es un script bash
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
fuente
La respuesta de @abbotto no funcionó para mí, tenía que hacer algunas cosas de manera diferente:
fuente
Me las arreglé para que funcione con eso:
fuente
En el siguiente ejemplo, escribiré la solución que usé:
El escenario: quiero copiar el archivo de un servidor usando el script sh:
fuente
Use esta secuencia de comandos dentro de la secuencia de comandos, el primer argumento es el nombre de host y el segundo será la contraseña.
fuente
Para conectar la máquina remota a través de scripts de shell, use el siguiente comando:
donde
IPADDRESS
,USERNAME
yPASSWORD
son valores de entrada que deben proporcionarse en el script, o si queremos proporcionar en tiempo de ejecución, use el comando "leer".fuente
StrictHostKeyChecking=no
sin explicar las consecuencias.presione la tecla enter y luego ingrese la contraseña de su sistema y finalmente ingrese la contraseña de su servidor
fuente