需要转义字符的脚本 SSH 交互式控制台

需要转义字符的脚本 SSH 交互式控制台

我想通过 shell 脚本修改现有的 SSH 连接。因此,如果我远程运行现有脚本,我希望它打开一个新端口进行隧道传输。

我可以通过以下方式交互地完成此操作:

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

正如我所表达得更清楚的那样:https://unix.stackexchange.com/questions/33557/using-an-already-established-ssh-channel

理想情况下,我希望使用 shell 脚本通过转义字符进行交互来调整现有连接。

我看过类似的东西:

#!/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 都是 shell 内置命令。

我正在使用 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

来源

相关内容