No se puede conectar al servidor SSH localmente con pubkey desde la computadora portátil para ssh-copy-id

No se puede conectar al servidor SSH localmente con pubkey desde la computadora portátil para ssh-copy-id

Por mi vida no puedo entender en qué me estoy equivocando y necesito otros ojos para señalar mis errores. Estoy ejecutando un servicio sshd en mi escritorio Arch localmente con ufw abriendo el puerto ssh designado.

La autenticación de contraseña funciona cuando la habilito, sin embargo, no puedo transferir mi clave pública ni siquiera con ssh-copy-id. Cuando cambio la sshd_configclave pública únicamente, se rechaza la conexión.

Los ssh [insert additional commands] -vvvdatos de depuración simplemente confirman que la máquina aún no tiene mi clave pública, pero cuando ejecuto mi red local, solo dice que queda 1 clave por instalar y que si se me solicita que instale la clave, pero luego rechaza la conexión.ssh-copy-id -p 31221 -i ~/.ssh/ed25519key.pub [email protected]

Mis reglas de ufw, tenga en cuenta que la dirección IP específica fue lo último que intenté eliminar, no ha estado allí todo el tiempo.

[john@thedream ssh]$ sudo ufw status
[sudo] password for john:
Status: active

To                         Action      From
--                         ------      ----
WWW Full                   ALLOW       Anywhere
31221                      ALLOW       192.168.1.0/24
31221                      ALLOW       192.168.1.251
WWW Full (v6)              ALLOW       Anywhere (v6)

Mi sshd_config

#   $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
Port 31221
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 50
#MaxSessions 10

PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
AuthenticationMethods publickey
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
KbdInteractiveAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin prohibit-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    /usr/lib/ssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

Mi servicio sshd se está ejecutando

[john@thedream ssh]$ sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Tue 2023-02-21 18:02:28 CST; 2s ago
   Main PID: 9451 (sshd)
      Tasks: 1 (limit: 38319)
     Memory: 1.1M
        CPU: 4ms
     CGroup: /system.slice/sshd.service
             └─9451 "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"

Feb 21 18:02:28 thedream systemd[1]: Started OpenSSH Daemon.
Feb 21 18:02:28 thedream sshd[9451]: Server listening on 0.0.0.0 port 31221.
Feb 21 18:02:28 thedream sshd[9451]: Server listening on :: port 31221.

Y mi puerto 31221 está abierto.

[john@thedream ssh]$ sudo lsof -i:31221
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    9451 root    3u  IPv4  88455      0t0  TCP *:31221 (LISTEN)
sshd    9451 root    4u  IPv6  88457      0t0  TCP *:31221 (LISTEN)

Respuesta1

Entonces resulta que solo puedes usar ssh-copy-id PasswordAuthenticationconfigurado yesen lo que diga todo lo que pueda encontrar.

Cita de la ssh-copy-idpágina de manual: (presumably using a login password, so password authentication should be enabled, unless you've done some clever use of multiple identities)

La advertencia es que si tiene una configuración de identidad múltiple y una de ellas ya tiene una clave pública guardada en el servidor, no estoy seguro de cómo configurarla honestamente o si se requieren pasos adicionales, pero creo que sería bastante fácil. usando la configuración ssh del lado del cliente como lo haría con otros servicios.

Debo haber estado arruinando algo anteriormente con mi autenticación de contraseña habilitada de antemano y no lo entendí.

La resolución es:

  1. Configure un servidor SSH básico pero seguro con sshd en la máquina host
  2. Luego, genere un par de claves en el cliente y utilícelo ssh-copy-idpara enviar su clave pública al servidor.
  3. Luego vaya y deshabilite la autenticación de contraseña en sshd_config en el servidor.
  4. Finalmente habilite las opciones de autenticación de clave pública en esa misma configuración.

Parece funcionar bien después de volver a lo básico.

información relacionada