ssh multi-hop ... adaptando el comando al archivo de configuración ssh

10

Estoy tratando de poner mi comando ssh de múltiples saltos en el archivo ssh .ssh / config.

Este es mi gráfico de conexión: laptop (estoy aquí) ------> userver -------> estación de trabajo

He puesto las claves rsa públicas ssh en 'userver' y 'workstation'. En este momento me puedo conectar escribiendo esta línea:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Sin embargo, me gustaría poder usar las capacidades del archivo de configuración en ~ / .ssh / config para lograr el mismo efecto pero usando un comando simple, que también me permitiría hacer una copia rápida con 'scp'. El único problema es que 'userver' no tiene el comando "nc" y no tengo superusuario allí, solo control de mi carpeta de inicio. Sin embargo, probé algunas cosas:

Tengo este archivo de configuración en mi computadora portátil (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

También otro archivo de configuración en el usuario (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Con estos archivos de configuración me puedo conectar como

ssh -A -t userver ssh -A workstation

lo cual es una mejora, pero no suficiente. Intenté agregar otro host en la configuración de mi computadora portátil, así:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Entonces, cuando lo hago

ssh hop

me sale el siguiente resultado con errores y no puedo conectarme:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

¿Algunas ideas?

labotsirc
fuente

Respuestas:

6

El comando que necesitas es ProxyCommand.

Debe poner en su archivo .ssh / config estas líneas:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Ahora puede conectarse a la estación de trabajo de la PC mediante

  ssh worksation

Si esto no está claro, o si desea más detalles, le sugiero que lea esta excelente introducción a ssh multi-hopping.

Editar:

siempre puede definir un alias: en su archivo /home/your_name/.bashrc, agregue esta línea:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(He insertado la -Xopción para que pueda ejecutar aplicaciones gráficas en el servidor remoto, y verlas localmente; si no quiere esto, simplemente suelte el -X).

MariusMatutiae
fuente
Hola MariusMatutiae, probé tu solución, pero como dije en la publicación original, el nodo 'userver' carece del programa netcat (nc). Entonces recibo este error: estación de trabajo ssh bash: nc: comando no encontrado ssh_exchange_identification: Conexión cerrada por host remoto
labotsirc
¿No puedes instalarlo?
MariusMatutiae
Desafortunadamente no, no tengo superusuario en 'userver', por eso estaba probando un método alternativo. No lo entiendo, si esto funciona "ssh -A -t userver ssh -A workstation", ¿por qué la misma puesta en ProxyCommand no funciona?
labotsirc
1
@labotsirc He modificado ligeramente mi respuesta. Espero que te sea útil. Alternativamente, puede intentar instalar netcat localmente (es decir, ¡solo para usted!), Agregando en la línea Proxycommand ... la ruta completa a su propia copia de netcat. No estoy seguro de que esto funcione, debido a los permisos, pero puede intentarlo.
MariusMatutiae
Copié mi binario netcat, eliminé la opción -q0 porque estaba dando errores, ¡y ahora funciona! Gracias
labotsirc
10

Encontré que la siguiente solución funciona mucho mejor que usar netcat ( nc) como en el otro ejemplo. Con netcat mi conexión fue muy lenta y se colgó repetidamente hasta que presioné algunas teclas. Además, no necesita tener instalado netcat.

Agregue lo siguiente a su ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Entonces puedes hacer algo así:

ssh workstation

También tenga en cuenta que la razón por la ProxyCommandque no funciona es porque no está obteniendo lo que ProxyCommandsí funciona. ProxyCommanddebe crear una tubería sobre la cual sshpueda hacer una conexión SSL. En otras palabras, el comando debe iniciar un proceso cuyos stdin y stdout se conectan ssha un sshdpuerto. En su configuración, está haciendo una conexión ssh con la ProxyCommandque se conecta sshal shell de comandos en lugar de a un sshdpuerto.

jcoffland
fuente