Скрипт интерактивной консоли SSH, требующий экранированных символов

Скрипт интерактивной консоли SSH, требующий экранированных символов

Я хотел бы изменить свое существующее SSH-подключение через скрипт оболочки. Поэтому, если я запущу существующий скрипт удаленно, я хотел бы, чтобы он открыл новый порт для туннелирования.

Интерактивно я могу сделать это через:

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

Как я выразился гораздо яснее, чем мог бы:https://unix.stackexchange.com/questions/33557/using-an-already-installed-ssh-channel.

В идеале я хотел бы использовать скрипт оболочки для взаимодействия с помощью экранированных символов для настройки существующего соединения.

Я посмотрел что-то вроде:

#!/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

А также несколько других комбинаций.

Я проверил, что echo и printf являются встроенными функциями оболочки.

Я использую Bash 4.3.11 x86_64-pc-linux-gnu.

решение1

Вам понадобится expectскрипт, чтобы добиться этого. Проблема в том, что эти escape-символы НЕ оцениваются bash, а локально вашим ssh-клиентом. Пример, который должен выполнить эту работу:

#!/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

Источник

Связанный контент