Скрипт SSH Interactive Console, которому нужны экранированные символы
Я хотел бы изменить мое существующее соединение 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.
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