Сценарна інтерактивна консоль SSH, для якої потрібні знаки, що втекли


2

Я хотів би змінити своє існуюче з'єднання 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.


вам, мабуть, знадобиться expectсценарій, щоб досягти цього. Але чому? Ви можете визначити переадресацію портів у командному рядку набагато простіше.
Jakuje

Я сподівався, що зможу визначити набір функцій bash, які можуть змінити існуючий сеанс ssh. Я не чудовий у цьому дійсно низькому рівні. Але не бачу жодної причини, яку не вдалося зробити в башті. Хоча очікування може працювати добре. Я побачу, що я можу зробити там, щоб змусити її грати красиво.
Люк Екстон

Проблема полягає в тому, що ці символи евакуації оцінюються не bash, а локально вашим ssh-клієнтом.
Jakuje

Отже, знаки втечі, які я хочу надіслати, повинні бути оцінені ssh-клієнтом на моїй локальній машині? Замість того, щоб ударити на віддаленому кінці. Навіть надсилаючи це через tcl / очікуючи, це не оцінить це на стороні клієнта?
Люк Екстон

очікував, що слід це зробити, але я ще не намагався. Є деякі посилання .
Jakuje

Відповіді:


0

Для цього вам знадобиться expectсценарій. Проблема полягає в тому, що ці символи евакуації оцінюються не 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

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.