Script SSH Interactive Console que necesita caracteres escapados

2

Me gustaría modificar mi conexión SSH existente a través de un script de shell. Entonces, si ejecuto un script existente de forma remota, me gustaría que abra un nuevo puerto para ser tunelizado.

Interactivamente puedo hacer esto a través de:

ubuntu@6c1a17c3864c:~$ ~C
ssh> -R 9000:localhost:9000

Como lo puse mucho más claramente de lo que pude: https://unix.stackexchange.com/questions/33557/using-an-already-established-ssh-channel .

Idealmente, me gustaría usar un script de shell para interactuar a través de los caracteres escapados para ajustar la conexión existente.

He visto algo como:

#!/bin/bash 
# Attempt 1
echo -n '\r\f \~\~C -L 9000:localhost:9000'
# Attempt 2
echo -e '\r\f\~\C -R 9000:localhost:9000'
printf '\~\C -L 9000:localhost:9000'
netstat -taln

Así como algunas otras combinaciones.

He verificado que tanto echo como printf son componentes integrados de shell.

Estoy usando Bash 4.3.11 x86_64-pc-linux-gnu.

Luke Exton
fuente
probablemente necesites un expectscript para lograr esto. ¿Pero por qué? Puede definir el reenvío de puertos en la línea de comandos mucho más fácil.
Jakuje
Esperaba poder definir un conjunto de funciones bash que pudieran modificar la sesión ssh existente. No soy bueno en estas cosas de muy bajo nivel. Pero no veo ninguna razón para que no se pueda hacer en bash. Sin embargo, podría funcionar bien. Veré qué puedo hacer allí para que funcione bien.
Luke Exton
El problema es que estos caracteres de escape NO son evaluados por bash, sino localmente por su cliente ssh.
Jakuje
Entonces, ¿los caracteres de escape que quiero enviar tendrían que ser evaluados por el cliente ssh en mi máquina local, verdad? En lugar de golpear en el extremo remoto. ¿Incluso enviar esto a través de tcl / expect no lo evaluaría en el lado del cliente?
Luke Exton
esperar debería hacer eso, pero aún no lo intenté. Hay algunas referencias .
Jakuje

Respuestas:

0

Necesitarías un expectscript para lograr esto. El problema es que estos caracteres de escape NO son evaluados por bash, sino localmente por su cliente ssh. Ejemplo que debería hacer el trabajo:

#!/usr/bin/expect -f
set timeout 10
 exp_internal 1
spawn telnet $argv
expect "login:"
send "mylogin\n"
expect "Password:"
send "mypass\n"
expect '~$'
# Send some commands
close

Fuente

Jakuje
fuente