이스케이프된 문자가 필요한 SSH 대화형 콘솔 스크립트

이스케이프된 문자가 필요한 SSH 대화형 콘솔 스크립트

쉘 스크립트를 통해 기존 SSH 연결을 수정하고 싶습니다. 따라서 기존 스크립트를 원격으로 실행하는 경우 터널링할 새 포트를 열고 싶습니다.

대화형으로 다음을 통해 이 작업을 수행할 수 있습니다.

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

내가 할 수 있는 것보다 훨씬 더 명확하게 말하자면:https://unix.stackexchange.com/questions/33557/using-an-already-founded-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이를 달성하려면 스크립트가 필요합니다 . 문제는 이러한 이스케이프 문자가 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

원천

관련 정보