我想编写一个脚本,通过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
" )
答案 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开始。