Gostaria de modificar minha conexão SSH existente por meio de um script de shell. Portanto, se eu executar um script existente remotamente, gostaria que ele abrisse uma nova porta para ser encapsulada.
Interativamente, posso fazer isso por meio de:
ubuntu@6c1a17c3864c:~$ ~C
ssh> -R 9000:localhost:9000
Como foi dito com muito mais clareza do que eu poderia:https://unix.stackexchange.com/questions/33557/using-an-already-established-ssh-channel.
Idealmente, eu gostaria de usar um script de shell para interagir por meio dos caracteres de escape para ajustar a conexão existente.
Eu olhei para 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
Bem como algumas outras combinações.
Eu verifiquei que echo e printf são integrados ao shell.
Estou usando o Bash 4.3.11 x86_64-pc-linux-gnu.
Responder1
Você precisaria de expect
um script para conseguir isso. O problema é que esses caracteres de escape NÃO são avaliados pelo bash, mas localmente pelo seu cliente ssh. Exemplo que deve fazer o trabalho:
#!/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