¿Cómo SSH a localhost sin contraseña?

17

EDITAR: Poniendo exactamente lo que se hizo.

Necesito SSH localhostsin contraseña, la forma habitual de hacerlo (con claves públicas) no funciona.

user@PC:~$ rm -rf .ssh/*
user@PC:~$ ssh-keygen -t rsa > /dev/null 
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
user@PC:~$ ls .ssh/
id_rsa  id_rsa.pub
user@PC:~$ ssh-copy-id -i localhost 
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is f7:87:b5:4e:31:a1:72:11:8e:5f:d2:61:bd:b3:40:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh-agent $SHELL
user@PC:~$ ssh-add -L
The agent has no identities.
user@PC:~$ ssh-add 
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
user@PC:~$ ssh-add -L
ssh-rsa ...MY KEY HERE

user@PC:~$ ssh-copy-id -i localhost 
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh localhost echo 'testing'
user@localhost's password: 

user@PC:~$ 

Entonces, como puede ver en el último comando, ¡todavía está pidiendo la contraseña! Cómo puedo arreglar eso ?? Ubuntu-10.04, OpenSSH_5.3p1

EDIT2:

Agregar información sobre el sshd

user@PC:~$ cat /etc/ssh/sshd_config | grep Authentication
# Authentication:
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
ChallengeResponseAuthentication no
# PasswordAuthentication yes
#KerberosAuthentication no
#GSSAPIAuthentication no
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.

EDITAR3: Resultado de anuncio de $ ssh -vv localhost

$ssh -vv localhost
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/identity
debug1: Offering public key: /home/user/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
user@localhost's password: 

EDITAR4:

Simplemente verificando si los archivos son iguales y el md5sum está de acuerdo

Canesina
fuente
¿Tiene RSAAuthentication yesy PubkeyAuthentication yesen su / etc / ssh / sshd_config? ¿Qué muestra ssh -vv localhost? Acabo de probar esto en una caja de 10.04 y no tuve ningún problema ...
Doon
Hy Doon, de hecho ... Tengo tanto que sí ... Agregué la salida de ssh -vv en la pregunta.
Canesin
¿Por qué necesita ssh a localhost si ya tiene acceso?
vtest
Los softwares de procesamiento en paralelo usan ssh / rsh local
Canesin
No publique la respuesta en la pregunta ni ponga "SOLUCIONADO" en el título. Has hecho lo correcto al proporcionar una respuesta. Una vez que haya aceptado la respuesta, el sistema mostrará que el problema está resuelto.
ChrisF

Respuestas:

10

Antes que nada, debes entender lo que estás haciendo:

user@PC:~$ cat .ssh/id_rsa.pub | ssh localhost 'cat >> .ssh/authorized_keys'

Está copiando la clave pública a .ssh/id_rsa.pubtravés de ssh, al mismo host (eso es lo que es localhost, el mismo host). Si lo reemplaza localhostcon algún otro host, eso tendría más sentido (pero si está intentando esto por el simple hecho de aprender cómo hacerlo, está bien).

Una vez que tenga una copia de su clave pública en el host remoto (o el mismo en el que se encuentra), debe asegurarse de usarla para la autenticación, en su host real, llamando ssh-agent/ ssh-add:

$ eval `ssh-agent`
$ ssh-add

Luego, si proporcionó una frase de contraseña, se le pedirá que la ingrese después ssh-add. Si generó una clave privada sin frase de contraseña, entonces eso es todo.

Torian
fuente
Sí, entiendo los comandos, simplemente lo expresé para dejar en claro que hice las cosas habituales con las teclas. Hice ssh-add ... no pide la frase de contraseña (como no usé ninguna en la creación) ... pero de nuevo, haciendo $ ssh localhost ls, pide la contraseña
Canesin
Entonces, si ejecutó ssh-add, edite su pregunta y ponga todo lo que hizo. Cuanta más información proporcione, mejor y más rápida será la respuesta.
Torian
Lo siento, lo arreglé ahora ...
Agregué
¡Un millón de gracias! Por cierto, ¿por qué " eval"?
IProblemFactory
3

Han descubierto el problema.

Ejecutando el servidor con depuración:

$sshd -Dd

Descubrí que no podía leer la auth_key

$chmod 750 $HOME

Arreglado.

Canesina
fuente
¿Cuáles fueron las banderas de archivo anteriores?
bbaja42
2

Haz los siguientes pasos

ssh-keygen -t rsa -C "[email protected]"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.

Use el archivo predeterminado y la frase de contraseña vacía (simplemente presione Intro en los siguientes 2 pasos)

# start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Agent pid 59566
ssh-add 

Copie el contenido de ~ / .ssh / id_rsa.pub a ~ / .ssh / optional_keys

Asegúrese de que los siguientes sean los permisos

 ls -l .ssh/
 total 20
-rw-r--r--. 1 swati swati  399 May  5 14:53 authorized_keys
-rw-r--r--. 1 swati swati  761 Jan 12 15:59 config
-rw-------. 1 swati swati 1671 Jan 12 15:44 id_rsa
-rw-r--r--. 1 swati swati  399 Jan 12 15:44 id_rsa.pub
-rw-r--r--. 1 swati swati  410 Jan 12 15:46 known_hosts 

Además, asegúrese de que los permisos para el directorio .ssh sean. Esto tambien es importante

drwx------.   2 swati swati    4096 May  5 14:56 .ssh
swatisinghi
fuente
1
Asegure 750 permisos en $ HOME
swatisinghi
En mi máquina (Fedora 28), configurar el permiso de authorized_keys0600 resuelve el problema, mientras que el permiso del .sshdirectorio no tiene ningún efecto en sshing localhost
Chang Qian
1

Simplifica la configuración del servidor

Creo que es posible que deba deshabilitar la autenticación basada en contraseña. Este es un sshd_config que uso

Port 22
Protocol 2
PermitRootLogin no
StrictModes yes
PasswordAuthentication no
ChallengeResponseAuthentication no
MaxStartups 2
AllowUsers peter paul mary
LogLevel VERBOSE

Pruebe algo mínimo primero, luego agréguelo ya que necesita capacidades adicionales.


Actualizar:

Verificar registros del servidor

Desde su EDIT3 veo que la autenticación de clave pública falla antes de que el cliente intente la autenticación basada en contraseña. El syslog de su servidor puede contener algunos mensajes de sshd que arrojan algo de luz sobre esto.

Recargar configuraciones modificadas

Recuerde indicar sshdpara recargar cualquier cambio de configuración. P.ejkill -HUP $(cat /etc/sshd.pid)

RedGrittyBrick
fuente
Creo que deshabilitar la autenticación de contraseña cuando ni siquiera puede ingresar sin la contraseña sería lo último que quiere hacer (bloquearse por completo)
Amalgovinus
@Amalgovinus: La pregunta se ha editado ampliamente desde que publiqué mi respuesta inicial. Supongo que podría eliminar esta respuesta.
RedGrittyBrick
0

Con respecto a la publicación anterior, mientras enfrento el mismo problema, acabo de cambiar la línea

Contraseña Autenticación no

en el archivo / etc / ssh / sshd_config y funcionó.

Además, quizás sea mejor usar

servicio sshd reiniciar

para recargar los cambios de configuración sshd.

Nicolas
fuente
0

Otra solución para la función SELinux de Red Hat Enterprise Linux 6.5 que impide que sshd lea $ HOME / .ssh es usar restorecon, consulte mi respuesta aquí /superuser//a/764020/213743 .

buzz3791
fuente
0

Para mí fue tan simple como

cat id_rsa.pub >> authorized_keys
usuario695025
fuente
0

Tuve el mismo problema, seguí los 3 pasos para crear la contraseña menos iniciar sesión y funciona bien

1. ssh-keygen -t rsa
Press enter for each line
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod og-wx ~/.ssh/authorized_keys
Hadi Rahjoo
fuente