Me gustaría modificar mi conexión SSH existente mediante un script de shell. Entonces, si ejecuto un script existente de forma remota, me gustaría que abra un nuevo puerto para tunelizarlo.
De forma interactiva puedo hacer esto a través de:
ubuntu@6c1a17c3864c:~$ ~C
ssh> -R 9000:localhost:9000
Como se expresó mucho más claramente de lo que podría:https://unix.stackexchange.com/questions/33557/using-an-already-establecido-ssh-channel.
Lo ideal sería utilizar un script de shell para interactuar a través de los caracteres de escape para ajustar la conexión existente.
He mirado 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
Además de algunas otras combinaciones.
He verificado que tanto echo como printf son componentes integrados del shell.
Estoy usando Bash 4.3.11 x86_64-pc-linux-gnu.
Respuesta1
Necesitaría expect
un script 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 funcionar:
#!/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