Pregunta ¿Cómo automatizar el inicio de sesión SSH con contraseña?


¿Cómo automatizar el inicio de sesión SSH con contraseña? Estoy configurando mi VM de prueba, por lo que no se considera una gran seguridad. SSH elegido para una seguridad aceptable con una configuración mínima.

ex)

echo password | ssh id@server

Esto no funciona.

Recuerdo que hice esto con algunos trucos que alguien me guió, pero ahora no puedo recordar el truco que usé ...


332
2018-03-01 11:07


origen


FreeBSD no aceptó claves sin contraseña. No seas tentado. Sin embargo, algunos servidores de Linux lo aceptaron. Creo que el servidor de Linux estaba mal configurado. - Eonil
Esta es una pregunta válida. Por ejemplo, quiero permitir que un usuario ingrese una contraseña y luego inicie sesión en otra máquina que la use. No puedo asumir que habrá claves ssh distribuidas en todas nuestras máquinas. Las respuestas a continuación hasta ahora no ayudan a esta situación. - dfrankow
unix.stackexchange.com/questions/38737/… || unix.stackexchange.com/questions/38737/… || stackoverflow.com/questions/233217/pass-password-to-su-sudo-ssh - Ciro Santilli 新疆改造中心 六四事件 法轮功
Pregunta muy importante. También necesito una respuesta, mi proveedor de espacio web bloquea los archivos de claves en el servidor, por lo que debo pasar la contraseña sin los archivos de claves. - Radon8472


Respuestas:


No use una contraseña. Genere una clave SSH sin contraseña y empújela a su VM.

Si ya tiene una clave SSH, puede omitir este paso ... Solo pega Entrar para la clave y ambas frases de contraseña:

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

Copie sus claves al servidor de destino:

$ ssh-copy-id id@server
id@server's password: 

Ahora intenta iniciar sesión en la máquina, con ssh 'id@server', y check in:

.ssh/authorized_keys

para asegurarte de que no hayamos agregado claves adicionales que no esperabas.

Por último comprobar el inicio de sesión ...

$ ssh id@server

id@server:~$ 

También puede querer mirar en usar ssh-agent si desea intentar mantener sus claves protegidas con una frase de contraseña.


296
2018-03-01 11:17



Finalmente decidí usar pares de llaves. Porque me di cuenta de que es la forma más sencilla. - Eonil
@Eonil: No te sientas tentado a usar claves sin una frase de contraseña. Aprende a usar ssh-agent o el concurso. - Iain
Esta es una buena respuesta, pero no la respuesta correcta a la pregunta. - John Hunt
Este tipo de respuestas realmente, realmente me molestan. Esa no era la pregunta. Nadie preguntó cómo usar pares de llaves. - Matt Fletcher
Esto no responde a la pregunta. Es una buena respuesta para una pregunta completamente diferente, pero es terrible para la pregunta. - srchulo


$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname

495
2018-05-31 09:08



Sí, a veces no puede usar autenticación basada en clave por varias razones ... por ejemplo, ahora mismo no puedo usar keyauth en un servidor plesk porque no está habilitado y no tengo root. - John Hunt
+1! Como nota al margen, necesitas correr plano ssh una vez antes de usar sshpass, para confirmar la huella dactilar RSA - user123444555621
-1 por tener que usar la contraseña en el comando. Esto registra la contraseña en .bash_history en texto plano en su máquina.
@MisterDood Podrías correr history -r Después del comando para borrar su historia. Buen punto sin embargo. - NuclearPeon
Consejo profesional: si no desea que aparezca un comando específico en .bash_history, prefije el comando con un espacio. Simplemente funciona. Sin embargo, los usuarios de este comando deberían preocuparse más de que los usuarios sin privilegios en el sistema puedan ver la línea de comandos completa con ps, que, por supuesto, incluye la contraseña. Dado que las sesiones ssh tienden a ser de larga duración, este es un problema de seguridad. - CubicleSoft


Respuesta fácil en tres sencillos pasos

Generar un rsa keypair:

# ssh-keygen

luego copiarlo en el servidor con un comando simple:

# ssh-copy-id userid@hostname

ahora puede iniciar sesión sin contraseña:

# ssh userid@hostname

56
2017-11-14 12:57



Funciona bien con los valores por defecto. Usar ~ / rsa4live.pub no me funcionó cuando intenté ssh-copy-id. - Cees Timmerman
Si desea que estos pasos funcionen para un usuario diferente, 1. ssh-keygen 2. ssh-copy-id nazir @ hostname 3. ssh nazir @ hostname - Venfah Nazir
Para mi fue ssh-copy-id -i ~/.ssh/tatu-key-ecdsa user@host - Gabriel Fair
Esto no es una respuesta a la pregunta. - Steve Bennett
¿Y? La respuesta está arriba, sshpass ... - lzap


Uso espera:

#!/usr/bin/expect -f
#  ./ssh.exp password 192.168.1.11 id
set pass [lrange $argv 0 0]
set server [lrange $argv 1 1]
set name [lrange $argv 2 2]

spawn ssh $name@$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

Ejemplo:

# ./1.ex password localhost ooshro
spawn ssh ooshro@localhost
ooshro@localhost's password: 
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
Last login: Tue Mar  1 12:41:12 2011 from localhost

25
2018-03-01 11:08



Funcionó pero no puede imprimir la salida estándar de la máquina remota. - Eonil
funciona bien para algunas máquinas no puede poner la clave por adelantado ya que la dirección IP se cambia cada vez. - larrycai
será bueno agregar -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null para el comando ssh también para evitar aceptar la máquina en hosts_ conocidos - larrycai
B .. b pero muh ssh teclas ... - Damien Ó Ceallaigh
Un ejemplo más detallado de este script se puede encontrar en: linuxaria.com/howto/…  Estos ejemplos aquí también deberían funcionar con comandos remotos - Radon8472


Puede que esto no te sirva de nada, pero puedes hacerlo con Perl:

\#!/usr/bin/perl  
use warnings;  
use strict;  

use Net::SSH::Perl;  
my $host = 'remote.serv.er';  
my $user = 'root';  
my $pass = 'hunter2';  
my $ssh = Net::SSH::Perl->new('$host');  
$ssh->login('$user', '$pass') or die "Oh noes! $!";

11
2018-03-01 11:52



Igualmente, puedes hacer con este Ruby. github.com/net-ssh/net-ssh - EnabrenTane


¿Seguro que no quieres usar claves SSH en lugar de contraseñas? De esa manera es seguro y automático.


9
2018-03-01 11:14



Usar claves SSH sin contraseña es solo un poco más seguro que usar contraseñas en un archivo. - yunzen
@yunzen Incorrecto. La autenticación de clave lo protege de los ataques mitm incluso si no conoce la clave de host. Un atacante podría hacerse pasar por el servidor, pero nunca conectarse al servidor real. Con la autenticación de contraseña, cualquier servidor al que se conecte (legítimo o no) verá la contraseña. Por esas razones, una clave ssh sin contraseña es mucho más segura que simplemente almacenar la contraseña en un archivo. - kasperd
Esto no es una respuesta. - Steve Bennett
@SteveBennett Es igual que la respuesta aceptada y se publicó antes, aunque tiene menos detalles. - Michael Hampton♦
Bueno, diría que la respuesta aceptada es una respuesta decente a una pregunta que no se hizo. Esto no es nada. - Steve Bennett


Estoy sorprendido de que nadie mencione plink desde el putty-tools paquete en Ubuntu:

plink user@domain -pw mypass  [cmd]

También está disponible en Windows y la sintaxis es mayormente compatible con el cliente openssh.


4
2017-07-09 13:15



Para Windows, su respuesta es buena, por lo general un usuario de Linux / Unix normalmente no tiene plink - Radon8472
eso esta en el putty-tools paquete - eadmaster