쉘 스크립트를 통해 기존 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