Estoy tratando de obtener acceso ssh a mi enrutador. Actualmente solo tengo acceso telnet e instalé dropbear y se está ejecutando (usando opkg en una unidad USB conectada al enrutador).
Desde el principio, lo que hice fue generar una clave privada y descifrarla (desde dropbear no admite esto todavía) y la pública:
cd .ssh openssl genrsa -des3 -out id_rsa openssl rsa -in id_rsa -out id_rsa ssh-keygen -y -f id_rsa > authorized_keys
Subí la clave pública (authorized_keys
) a /root/.ssh
. Puse el archivo en un servidor Apache (en mi computadora local) y lo descargué en el enrutador usando wget (para que el archivo descargado obtenga root como propietario / grupo) y luego cambié los permisos a 0600 (lo mismo para el cliente pero con mi usuario ).
Cuando intento acceder, aparece un error de «Permiso denegado (clave pública)»:
$ ssh -v -i ~/.ssh/id_rsa [email protected] OpenSSH_7.4p1, OpenSSL 1.0.2j 26 Sep 2016 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Connecting to 192.168.1.1 [192.168.1.1] port 22. debug1: Connection established. debug1: key_load_public: No such file or directory debug1: identity file /home/chazy/.ssh/id_rsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/chazy/.ssh/id_rsa-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.4 debug1: Remote protocol version 2.0, remote software version dropbear debug1: no match: dropbear debug1: Authenticating to 192.168.1.1:22 as "root" debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: [email protected] debug1: kex: host key algorithm: ssh-rsa debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: ssh-rsa SHA256:1EFA75uwLp+4hBW0t3aaY05QjLzYd4jjDWoULAzF/8o debug1: Host "192.168.1.1" is known and matches the RSA host key. debug1: Found key in /home/chazy/.ssh/known_hosts:1 debug1: rekey after 4294967296 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 4294967296 blocks debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /home/chazy/.ssh/id_rsa debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. Permission denied (publickey).
A menos que yo » Leí mal lo que dice la documentación ( repositorio de GitHub ):
Auth de clave pública del servidor :
Puede usar ~ / .ssh / authorized_keys de la misma manera que con OpenSSH, simplemente coloque las entradas de clave en ese archivo. Deben tener el formato:
ssh- RSA AAAAB3NzaC1yc2EAAAABIwAAAIEAwVa6M6cGVmUcLl2cFzkxEoJd06Ub4bVDsYrWvXhvUV + ZAM9uGuewZBDoAqNKJxoIn0Hyd0Nk / yU99UVv6NWV / 5YSHtnf35LKds56j7cuzoQpFIdjNwdxAN0PCET / MG8qyskG / 2IE2DPNIaJ3Wy + = Ws4IZEgdJgPlTYUBWWtCWOGc alguien @ hostname
debe asegurarse de que ~ / .ssh, y el archivo de claves, sólo pueden ser escritos por el usuario. Cuidado con los editores que partió la llave en varias líneas.
Dropbear admite algunas opciones para entradas de claves_autorizadas, consulte la página de manual.
Hice todo lo que dice, así que no sé dónde podría estar el problema.
La documentación menciona otra forma:
Autenticación de clave pública del cliente:
Dropbear puede realizar la autenticación de clave pública como cliente, pero tendrá que convertir las claves de estilo OpenSSH al formato Dropbear, o usar dropbearkey para crearlas.
Si tiene una clave privada de estilo OpenSSH ~ / .ssh / id_rsa, debe hacer:
dropbearconvert openssh dropbear ~ / .ssh / id_rsa ~ / .ssh / id_rsa.db dbclient -i ~ / .ssh / id_rsa.db
Dropbear no admite claves de host cifradas, aunque puede conectarse a ssh-agent.
Entonces, esto indica que si convierto la clave privada en un dropbear clave privada, puedo usar el cliente dropbear para conectarme al servidor dropbear:
dropbearconvert openssh dropbear id_rsa id_rsa.db
Voy a intentarlo y ver si funciona. Pero de todos modos, la autenticación de la clave pública del servidor debería funcionar.
Comentarios
Respuesta
Respuesta corta: Probablemente esté ejecutando OpenWrt, y necesita poner su clave pública en /etc/dropbear/authorized_keys
en lugar de /root/.ssh/authorized_keys
.
Respuesta larga:
El GitHub El repositorio al que apunta es el que mantiene el autor de dropbear; dice que ~/.ssh/authorized_keys
funciona, y según GitHub lo ha hecho al menos durante 14 años. Mirando el código en svr-authpubkey.c agrega /.ssh/authorized_keys
al «pw_dir».
Yo, sin embargo , tuve el mismo problema que tú, y descubrí que el binario proporcionado en OpenWrt 18.06.1 en realidad está abriendo /etc/dropbear/authorized_keys
. Usar ese archivo me funciona .
Este comportamiento está documentado en los documentos de OpenWrt .
Entonces, ¿por qué?
Dado que el código anterior no puede producir ese nombre de archivo por sí solo (falta .ssh
) y no hay .ssh
enlace simbólico en ninguna parte, ejecuté strings
en el binario. Eso mostró que /etc/dropbear/authorized_keys
se menciona explícitamente, justo antes del %s/.ssh/authorized_keys
que se puede esperar del código de GitHub. Concluyo que el binario de OpenWrt no está compilado de las mismas fuentes … y de hecho, OpenWrt parchea el código ascendente con este parche . Cambia el archivo usado a /etc/dropbear/authorized_keys
si (y solo si) el usuario de destino es root.
Ya que mencionas opkg
, imagino que también estás usando OpenWrt, y que este es tu problema. He agregado una etiqueta OpenWrt a su pregunta.
Respuesta
authorized_keys
es un archivo, no un directorio.
Un ejemplo de archivo de claves_autorizadas:
# Comments allowed at start of line ssh-rsa AAAAB3Nza...LiPk== [email protected] from="*.sales.example.net,!pc.sales.example.net" ssh-rsa AAAAB2...19Q== [email protected]
http://man.he.net/man5/authorized_keys
También el .ssh/
y todos los archivos en él deben ser propiedad y ser legibles solo por el usuario, en este caso root
.
Comentarios
- Acabo de arreglar eso pero aún no tuve suerte 🙁 (ver pregunta actualizada).
Respuesta
man dropbearkeys:
NOTES The program dropbearconvert(1) can be used to convert between Dropbear and OpenSSH key formats. Dropbear does not support encrypted keys. EXAMPLE generate a host-key: # dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key extract a public key suitable for authorized_keys from private key: # dropbearkey -y -f id_rsa | grep "^ssh-rsa " >> authorized_keys
Comentarios
- Logré convertir la clave privada, pero aún así no tuve suerte 🙁 (ver pregunta actualizada).
Respuesta
Debe crear la clave ssh usando la herramienta dropbearkey. RSA_KEYFILE = / etc / dropbear / dropbear_rsa_host_key DSS_KEYFILE = / etc / dropbear / dropbear_dss_host_key
dropbearkey -t dss -f $ DSS_KEYFILE
dropbearkey -t rsa -f $ RSA_KEYFILE
Luego reinicie el demonio dropbear. Luego intente conectarse, debería funcionar.
Respuesta
Algunos consejos que pueden ayudarlo a conectarse usando PKI con Dropbear, esto probó un contenedor basado en paquetes Alpine Linux 3.12, conectándose desde un cliente OpenSSH.
- El usuario necesita un shell.
- El usuario no necesita una contraseña de inicio de sesión.
- El usuario «s
~
no debe ser escribible en grupo / mundo (es decirchmod 755
eso, al menos; debería usar700
para los directorios de inicio). - El usuario «s
~/.ssh
y~/.ssh/authorized_keys
debe ser accesible solo para el propietario (p. Ej.,700
en el directorio y600
en el archivo). - Allí debe ser un
/tmp
directorio de escritura - Las entradas
authorized_keys
tienen el mismo formato que se usa por OpenSSH.
Estoy creando contenedores usando archivos seleccionados de paquetes alpine; Tengo una imagen de ~ 2 MB a la que puedo acceder mediante SSH siempre que se cumplan todos los requisitos anteriores.
Respuesta
I me encontré con esta pregunta mientras buscaba razones por las que la conexión a través de dropbear a mi servidor dejó de funcionar de repente (ha estado funcionando durante meses, pero solo se usa ocasionalmente cada dos semanas).
la solución / explicación i finalmente se encontró en el mensaje debug1: send_pubkey_test: no mutual signature algorithm
con mayor nivel de detalle en el intento de conexión ssh de mis clientes, lo que me llevó a un artículo de solución de problemas de bitbucket .
Ese artículo menciona El algoritmo RSA está siendo rápidamente obsoleto en todos los sistemas operativos y clientes SSH debido a varias vulnerabilidades de seguridad […] como causa y enumera como posibles soluciones ya sea:
-
agregando
PubkeyAcceptedKeyTypes +ssh-rsa
al archivo cfg del cliente (solo use esto como solución temporal ya que es potente ¡ncionalmente inseguro!) -
use el algoritmo / claves ECDSA o ED25519. ahora, con la versión dropbear presente en mi sistema, pude solo usar ECDSA ya que ED25519 me dio errores de algoritmo desconocido en el lado de dropbears.
Espero que esto ayude a alguien a tropezar con esta pregunta, como lo hice yo, aunque probablemente no sea una solución a la pregunta original, por favor. perdonar.
opt/etc/dropbear
(solo las claves del host), y el parámetro para no permitirlo es -w (sin usarlo).