期望:如何从ssh会话中打开telnet会话?

时间:2014-04-02 14:10:11

标签: session ssh telnet expect

我想编写一个脚本,通过SSH自动将我连接到给定的IP,然后打开一个telnet会话,从那里刚刚连接。

我的期待代码到现在为止:

# $1 = ssh root@111.111.111.111
# $2 = password
# $3 = telnet 123.123.123.123 10023

(expect -c "
            set timeout 20
            spawn $1
            expect {
                    \"Password:\" { send \"$2\r\" }
                    timeout { send_error \"\nTimeout!\n\"; exit 1; } 
            }
            spawn $3
            interact
            "  )

我的问题是我无法在ssh会话中生成telnet,脚本只是" telnetting"从我的主目录。也许有会话ID的方法,但我找不到有用的信息。

如果有人能提出一些解决方案或解决方法,那会很好, 提前谢谢,请原谅我糟糕的英语技能:)

编辑:

对我的问题有帮助的是:

(expect -c "
            set timeout 20
            spawn ssh root@server telnet server2
            expect {
                    \"Password:\" { send \"$2\r\" }
                    timeout { send_error \"\nTimeout!\n\"; exit 1; } 
            }
            interact
            "  )

2 个答案:

答案 0 :(得分:0)

正如您还要求解决方法一样,这里有一个:您可以使用ssh端口转发

ssh -f -N -n root@111.111.111.111 -L 10024:123.123.123.123:10023

[等待连接]

telnet localhost 10024

在这里,ssh将打开一个连接并进入后台。本地ssh客户端将侦听端口10024并将所有流量重定向到123.123.123.123端口10023.只要此ssh实例正在运行,您就可以打开并使用telnet会话(从初始位置开始)。

答案 1 :(得分:0)

我对你有一些不同的方法,也许更容易。
据我了解:
您想要通过SSH连接到您的服务器并从那里telnet到另一个地方

您是否考虑过使用基于密钥的身份验证? 对于这种方法,您可以将您的身份密钥添加到远程服务器上的.ssh / authorized_keys 这是一个使用命令行期望的示例,使用密钥文件连接到SSH服务器,然后连接到邮件服务器并发送" HELO测试"
在我的服务器上测试,工作

expect -c 'expect "\n" {eval spawn ssh -i identity_file my.sshserver.com telnet mail.anotherserver.com 25; expect "SMTP" {send "HELO test\r\n"};interact}'

您还可以为ssh(-oConnectTimeout)

添加超时选项

它将连接到服务器并调用telnet命令,因此您将打开一个已连接telnet的SSH会话。
脚本等待您的初始ENTER开始。