¿Evita la autenticación SSH de dos factores con conexión maestra y reenvío de puertos?


8

El problema 1.0

Estoy trabajando en un servidor que solo admite autenticación de dos factores (la autenticación de par de claves está deshabilitada). Entonces, cada vez que mi cliente SFTP quiere cargar un archivo, me pide un token ... después de 3 minutos que se convierte en un UX not_very_nice.

La solución 1.0

Así que aprendí sobre la multiplexación SSH y ahora puedo abrir una conexión maestra manualmente (desde el terminal), y todas las demás conexiones ssh se pueden multiplexar en la parte superior, así:

$ ssh example_com_master
Verification code: (/me enters the token code)
Password: (/me enters my pass)
Welcome to Ubuntu 14.04 blah blah....
Last login: Wed Oct  1 11:24:15 2014 from 12.34.56.78
$

Luego, desde otra terminal, o por otra pieza de software:

$ ssh my.example.com
Last login: Wed Oct  1 16:34:45 2014 from 12.34.56.78
$ 

Entonces, misión cumplida, no más entrar en el token 2FA. Y sin contraseña, para el caso, SSH FTW!

~ / .ssh / config:

Host example_com_master
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster yes
  ControlPath ~/.ssh/sockets/example_com
  ControlPersist 10

Host my.example.com
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster no
  ControlPath ~/.ssh/sockets/example_com

Problema 2.0 (TLDR)

¡Algún software (por ejemplo, PyCharm IDE) utiliza su propia biblioteca SSH / binario / lo que sea! Lo que significa que nada de lo que escriba ~/.ssh/configlo afectará, AFAIK.

Ese es mi problema actual: ¿hay alguna manera de "engañar" a dicho software para que use una conexión maestra ya existente?


Una idea: como normalmente puede configurar el software para usar un puerto diferente para conectarse, me preguntaba si sería posible configurar algún tipo de túnel que multiplexará las conexiones entrantes en el maestro existente. Pero mi foo me ha fallado ...

editar:

El propósito principal es conectarse al intérprete / depurador remoto de Python.

editar 2:

Todos los puertos están cerrados, excepto 22 y 80. Sin embargo, es posible hacer:

remote$ ssh localhost:2222
(password or securekey login, both work)
remote$ 

pero 2222 solo está abierto para conexiones desde localhost, y los administradores no abrirán ningún puerto adicional, diciendo "cualquiera podría usarlo".


Podría estar malinterpretando su problema, pero ¿no puede evitarlo con un montaje ssh local? Eso convertiría su acción sftp en una copia local, con el proceso de montaje que puede controlar el ssh.
Belrog

Debería haber mencionado eso en la pregunta ... Necesito el SSH para ejecutar el intérprete / depurador de Python remoto. De hecho, tengo un montaje sshfs para la sincronización de archivos :)
frnhr

¿Asumo que está trabajando en algunos componentes de hardware muy específicos de forma remota? El desarrollo remoto es realmente doloroso. Una máquina virtual local sería una mejor idea si puede hacer que funcione.
Belrog 01 de

¡Cierto! Pero en este proyecto en particular hay varias complicaciones con la configuración de un entorno local que no se puede resolver fácilmente :(
frnhr

@Belrog Convertí tu respuesta en un comentario. Por favor, solo publique una respuesta si realmente responde la pregunta. Para pedir una aclaración, publique un comentario. Para eso están.
terdon

Respuestas:


2

Un problema bastante interesante que tienes.

La solución real sería pedirle ayuda a su administrador de sistemas primero.

Si esa no es una opción, lo mejor es tener libssh de pyCharm o lo que sea que use (busqué en Google y no pude resolverlo) analizar su `~ / .ssh / config '.

Si eso no es posible, es posible que pueda ejecutar su propio demonio ssh en el host remoto que escucha en la dirección de bucle invertido y conectarse a él con un reenvío local.

Para configurar un demonio ssh sin privilegios (copiado de un enlace en la respuesta SF ):

  $ pwd
  /home/<USER>
  $ mkdir -p etc var/run
  $ cp /etc/sshd_config etc
  $ vi etc/sshd_config
  [Set `Port 2230']
  [Set `HostKey /home/<USER>/etc/ssh_host_rsa_key']
  [Set `UsePrivilegeSeparation no']
  [Set `PidFile /home/<USER>/var/run/sshd.pid']
  [:wq!]
  $ ssh-keygen -t rsa -f /home/<USER>/etc/ssh_host_rsa_key -N ''
  Generating public/private rsa key pair.
  Your identification has been saved in /home/<USER>/etc/ssh_host_rsa_key.
  Your public key has been saved in /home/<USER>/etc/ssh_host_rsa_key.pub.
  The key fingerprint is:
  02:5d:02:5d:e8:2e:c6:b9:4c:d9:93:6c:13:ef:5d:61 hein@vmbert2k8
  $ /usr/sbin/sshd -f /home/<USER>/etc/sshd_config -D

Ahora reenvíe un puerto local (iniciará sesión con 2fa aquí):

 ssh -L 2230:localhost:2230 example_com_master

Y dirigir pyCharm a localhost:2230. También puede configurar la autenticación de par de claves en su sshd personalizado.

Tenga en cuenta que esta es una posibilidad remota, y su administrador de sistemas puede no apreciarlo.

Existe una gran posibilidad de que pyCharm ya use OpenSSH para su implementación ssh. Si es así, agregar soporte de multiplexación a pyCharm sería mucho más fácil que la solución alternativa que he propuesto.


Gracias por la respuesta. Los administradores probablemente no me permitirán ejecutar mi propio sshd (dudo que incluso haya un puerto disponible). Pero si pudiera obtener un sshd separado ejecutándose en el servidor, entonces creo que podría no necesitar multiplexar nada, solo configure el servidor para la autenticación de pares de claves. ¿O hay algunos beneficios que me perdí?
viernes

Tienes razón sobre no necesitar multiplexación en absoluto :). Además, sé que me cabrearía si un usuario hiciera algo así sin preguntarme primero. Además, si va a preguntar al administrador del sistema de todos modos, una solución mucho más sensata sería no requerir 2fa de localhost. Eso es lo que suelo hacer de todos modos.
GnP

:) Y si no hubiera 2fa de localhost, ¿puede el túnel resolver el problema?
viernes

Exactamente, si no necesita 2fa de localhost, conectarse a través de un túnel es como conectarse localmente. La magia sshd_config para ello Match Address 127.0.0.1 PasswordAuthentication yes probablemente sea seguida por una sola Matchen una línea propia para cerrar la sección, si no está agregando esto al final del archivo.
GnP
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.