![需要转义字符的脚本 SSH 交互式控制台](https://linux22.com/image/1484130/%E9%9C%80%E8%A6%81%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6%E7%9A%84%E8%84%9A%E6%9C%AC%20SSH%20%E4%BA%A4%E4%BA%92%E5%BC%8F%E6%8E%A7%E5%88%B6%E5%8F%B0.png)
我想通过 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