Los servidores de producción de mi empresa (FOO, BAR ...) se encuentran detrás de dos servidores de puerta de enlace (A, B). Para conectarme al servidor FOO, tengo que abrir una conexión ssh con el servidor A o B con mi nombre de usuario JOHNDOE, luego desde A (o B) puedo acceder a cualquier servidor de producción que abra una conexión SSH con un nombre de usuario estándar (llamémoslo WEBBY).
Entonces, cada vez que tengo que hacer algo como:
ssh johndoe@a
...
ssh webby@foo
...
# now I can work on the server
Como puede imaginar, esto es una molestia cuando necesito usar scp
o si necesito abrir rápidamente varias conexiones.
He configurado una clave ssh y también estoy usando .ssh / config para algunos accesos directos.
Me preguntaba si puedo crear algún tipo de configuración ssh para escribir
ssh foo
y dejar que SSH abra / reenvíe todas las conexiones por mí. ¿Es posible?
Editar
La respuesta de womble es exactamente lo que estaba buscando, pero parece que ahora no puedo usar netcat porque no está instalado en el servidor de puerta de enlace.
weppos:~ weppos$ ssh foo -vv
OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/xyz/.ssh/config
debug1: Applying options for foo
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh a nc -w 3 foo 22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/xyz/.ssh/identity type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_rsa type 1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_dsa type 2
bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
fuente
Puede usar la directiva ProxyCommand en su archivo ~ / .ssh / config, por ejemplo, para usar netcat como retransmisión:
El simplemente usaría 'ssh server2'. La información de la página de manual para esta directiva se encuentra en 'man ssh_config'
fuente
Prefiero un enfoque diferente que mantenga un túnel previamente autenticado para el servidor de puerta de enlace. En
~/.ssh/config
:Luego en
.bashrc
:Entonces, para conectarse a foo:
La primera vez que lo conecte lo autenticará contra "a" y abrirá un túnel ssh persistente y en segundo plano. Las llamadas posteriores a "s" se abrirán casi instantáneamente a través del túnel previamente autorizado.
Funciona genial.
fuente
Este tipo de funcionalidad existe en las versiones más recientes de OpenSSH y se puede usar haciendo
¿Dónde
server2
está su destino previsto yserver1
es su servidor proxy? Puede hacer esto más fácil usando laProxyCommand
opción en su configuración ssh, algo como:fuente
Cuando
netcat
no esté disponible en el proxy, intente este truco:Entonces deberías poder hacerlo
ssh foo
.Además, si tiene una versión reciente de ssh en un (es decir, con el
-W
comando para reenviar entradas y salidas estándar), puede usar:Finalmente, solo porque lo encontré genial (y no porque funcione en su caso particular, debido a las diferencias de nombre de usuario), la publicación de blog de un amigo señala cómo hacer que este tipo de cosas sea dinámico y recursivamente encadenar proxies SSH (junto con algunas cosas que no funcionan bien):
Y luego
ssh machine1/machine2
debería darle un caparazónmachine2
, tunelizadomachine1
.Me pregunto si usar
sed
comandos personalizados en lugar dedirname
ybasename
podría no resolver el problema con diferentes nombres de usuario.fuente
Esto se puede lograr haciendo
ssh -At johndoe@a ssh webby@foo
. El-A
comando reenvía su agente ssh (para que pueda evitar tener que volver a autenticarse en el proxy), mientras que-t
asegura que existe un terminal en el proxy. La siguiente función bash puede ser útil:fuente
Netcat no está instalado en
a
. Cuando ejecutassh host "command arg"
,command
se ejecuta enhost
, no en su máquina local.fuente
Desde OpenSSH 7.3 (2016-08-01), la
ProxyJump
opción y el-J
indicador de línea de comando correspondiente han estado disponibles para permitir una indirección más simple a través de uno o más bastiones SSH o "hosts de salto".Eso elimina la dependencia del
nc
comando externo como se encuentra en la solución de Womble .establecerá una conexión SSH desde su estación de trabajo al servidor de puerta de enlace
a
como usuario johndoe y hará un túnel de la sesión SSH para alojar a un usuario Webby sobre eso.Para simplificar eso, cree definiciones de host tanto en su
~/.ssh/config
como en el que simplemente puede ejecutarssh foo
fuente