Скрипт SSH Interactive Console, которому нужны экранированные символы

456
Luke Exton

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

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

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

Как изложено намного яснее, чем я мог: https://unix.stackexchange.com/questions/33557/using-an-already-established-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.

3
вам, вероятно, понадобится сценарий `ожидаем`, чтобы добиться этого. Но почему? Вы можете определить переадресацию портов в командной строке гораздо проще. Jakuje 8 лет назад 0
Я надеялся, что смогу определить набор функций bash, которые могли бы изменить существующую сессию ssh. Я не очень хорош в этом действительно низком уровне. Но не вижу никакой причины, по которой это невозможно сделать в bash. Ожидать может работать хорошо, хотя. Я посмотрю, что я могу сделать, чтобы заставить его играть хорошо. Luke Exton 8 лет назад 0
Проблема в том, что эти escape-символы не оцениваются bash, а локально вашим ssh-клиентом. Jakuje 8 лет назад 0
Таким образом, escape-символы, которые я хочу отправить, должны оцениваться клиентом ssh на моей локальной машине, верно? Вместо того, чтобы bash на удаленном конце. Даже отправив это через tcl / ожидаемо, не оценили бы это на стороне клиента? Luke Exton 8 лет назад 0
ожидаю, должен сделать это, но я еще не пытался. [Есть некоторые ссылки] (http://www.linuxquestions.org/questions/programming-9/expect-scripting-help-escape-characters-663046/). Jakuje 8 лет назад 0

1 ответ на вопрос

0
Jakuje

Вам понадобится 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 

Источник