Digamos que me he conectado a una computadora remota a través de SSH. Desde un programa en esta computadora remota, necesito ejecutar un comando en mi computadora local (el iniciador de conexión).
Lo que plantea la pregunta: ¿es posible derivar a la conexión existente entre las dos computadoras para ejecutar un comando en la computadora local?
He considerado ejecutar el comando ssh user@host-of-connecting-party <command>
en la computadora remota para establecer una conexión inversa. Pero esto es más difícil de automatizar y requerirá la intervención del usuario. Esperaba poder automatizarlo completamente, o al menos detectar el usuario / nombre de host del usuario conectado.
ssh
remote-access
Aeyoun
fuente
fuente
Respuestas:
A veces tengo una necesidad similar, siempre y cuando me conecte a través de Putty a nuestro servidor VPN y desde allí a través de ssh a algún otro host, que no es accesible para mí directamente debido a la configuración de VPN.
A veces solo necesito verificar rápidamente algo en un servidor VPN mientras sigo ejecutando mi "sesión ssh". Un enfoque es ejecutar una sesión ssh bajo la
screen
cual, como he notado, agrega algo de retraso en comparación con "ssh regular". Otro enfoque, que me gustaría compartir aquí, es el siguiente:Mientras está bajo sesión SSH, presione Enter, luego ~, (asegúrese de que no se muestre, es decir, esté en modo comando), luego Ctrl- Z. Esto pondrá el proceso del cliente ssh en un "host" en segundo plano, y obtendrá algo similar a:
Ahora está en el "host", puede hacer lo que quiera (aunque, no estoy seguro de cuánto tiempo se mantendrá viva la sesión ssh), y luego volver a la sesión SSH ejecutándose
fg
.Al menos, esto funciona para mí mientras estoy conectado desde una estación de trabajo Win10 a través de Putty en una VM basada en CentOS, y desde esa VM se conecta a través de SSH a algún otro host.
Espero que ayude a alguien!
fuente
PermitLocalCommand yes
en su.ssh/config
para un anfitrión, también se puede hacer<Enter>~C
, entonces!<command>
.La respuesta de @ 62mkv es una solución mucho mejor. Usa eso.
Sin embargo, para completar y curiosidad, si tiene un servidor ssh ejecutándose en su máquina local, puede crear un túnel ssh para permitir conexiones ssh desde el host remoto en el puerto 20202 de regreso al local en el puerto 22. Comando de ejemplo:
Esto iniciará una conexión ssh, pero también configurará un túnel de regreso al servidor ssh que se ejecuta en su máquina. Entonces puede hacer esto, cuando ssh'ed en el host remoto:
Por supuesto, esto puede volverse confuso rápidamente, especialmente si la técnica está anidada más de una vez. También agrega un poco de latencia, ya que todo lo que ejecuta en su máquina local se devuelve a través del host remoto.
Puede encontrar información adicional sobre el túnel ssh para aquellos cuya curiosidad aún no se ha satisfecho en respuesta a esta pregunta de intercambio de pila de Unix .
fuente
Si se puede acceder a su computadora local y remota desde Internet, puede abrir una sesión SSH desde su computadora local en la computadora remota y luego, en esa sesión, abrir otra sesión ssh desde la computadora remota en la computadora local:
Para automatizar cosas, eche un vistazo a Fabric (se requiere conocimiento de Python)
fuente
Puede usar sshpass para conectarse a la computadora remota y ejecutar los comandos.
Use un script de shell simple en la computadora local y use el código anterior siempre que desee ejecutar comandos en una computadora remota. Esta es una de las formas en que generalmente uso en automatización.
fuente
No, no puedes entrar en la sesión existente.
Su aplicación necesitaría una forma de conectarse de nuevo al cliente. SSH funcionaría si el cliente tiene un servidor SSH en ejecución y el servidor puede alcanzar el puerto 22 en el cliente. No sería difícil automatizar si utilizara la autenticación basada en claves en lugar de la autenticación con contraseña; de esta manera, la intervención del usuario no sería necesaria.
Puede encontrar información sobre cómo configurar la autenticación basada en claves aquí: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
fuente
Si tiene acceso a otra terminal, puede enviar SIGSTOP usando "kill -19 PID" al comando ssh que inició la conexión. Entonces obtendrá el control del terminal en el terminal en la máquina del cliente. Una vez que haya terminado, puede restaurar la conexión ssh simplemente escribiendo fg para activar el cliente ssh.
Pero, por supuesto, la pregunta aquí es: si ya tiene un terminal en la máquina del cliente, ¿por qué haría esto? :)
fuente