remote login pass命令然后等待并传递命令

时间:2016-01-29 13:04:46

标签: linux shell ssh expect

我是普通的unix用户,但无法找到解决以下问题的方法。

问题陈述:

  1. 从我的终端运行此命令(注意我无法更改此命令或更改)

    ssh -N -f -L 50003:127.0.0.1:23 x.x.x.x; telnet 127.0.0.1 50003 
    
  2. 这将使用一些横幅消息登录x.x.x.x机器,它将要求我从空闲端口列表中选择,例如,

    Select a terminal from the list below:
    (17,18,20,21,22,24)
    

    现在我需要传递任何这些自由端口号,即17或20或24

  3. 提供此号码后,将显示以下内容:

    Connection established as terminal 17.
    > 
    
  4. 现在我需要传递login:uid=someusername并按下回车键

  5. 将显示以下内容

    Command entered at terminal #17.
    ;
    Enter Password :
    
  6. 现在我需要传递密码一旦我将登录到另一个显示以下内容的终端:

    ;
    Command Executed
    >
    
  7. 现在我需要输入我的命令,例如runjob

    一旦提供上述命令,它将运行一段时间,比如2分钟或5分钟

  8. 完成后会显示

    Command Completed.
    ;
    
  9. 这里我需要提供命令为ctrlkey+](控制键加上方括号)

    然后它将显示以下内容:

    telnet>
    

    我再次需要传递quit并按Enter键

    一旦完成,我将退出,所有这些交互也应保存在文件中以进行交叉验证。

    目前我安装了期望但无法通过。请帮忙

1 个答案:

答案 0 :(得分:0)

亲爱的Stackoverflow论坛,

在打破了我的脑袋近一个星期之后找到了解决方案。

***问题陈述

从S1(Server1)我需要登录到S2(server2)提供交互式命令并获取在我的S1中捕获的输出。***

解决方案

[weblogic@ tmp]$ cat test1.sh
#!/bin/bash

ssh -N -f -L 50002:127.0.0.1:23 10.64.246.124; telnet 127.0.0.1 50002
[weblogic@ tmp]$



[weblogic@ tmp]$ cat check.sh
#!/usr/bin/expect

spawn "./test1.sh"

expect "Select*" { send "24\r" }
sleep 1
expect "Connection*" { send "login:uid=inventory\r" }
expect "Enter*" { send "flask1234!\r" }
sleep 1
expect "Command*" { send "rtrv-stp\r" }
sleep 90
expect "Command*" { send "" }
expect "telnet" {send "q\r" }
interact
[weblogic@ tmp]$

以下命令将捕获我的所有日​​志以检查是否成功

[weblogic@ tmp]$ ./check.sh >>out.log 

我相信此脚本会引导可能遇到类似问题的其他人。

亲爱的论坛,虽然我得到了你几乎所有的疑问,但在这种情况下,我独自一人。