ruby ssh Oracle,ruby - 使用Ruby通过SSH创建Telnet连接 - 堆栈内存溢出

我有一个小问题。 首先,在完成这项任务之前,我从未编写过一行Ruby,因此在我的职权范围和舒适性方面有些超出。 这很可能是一个愚蠢的问题,但我一直在寻找什么感觉就像是永恒,却一无所获。

我已经找到了很多有关如何使用Net :: Telnet从本地计算机进行telnet以及如何使用Net :: SSH:Telnet基于当前SSH会话创建Telnet会话的信息,但是还没有找到专门处理我的问题的信息。问题。

我需要使用一组凭据将SSH连接到计算机上; 这是没有问题的:

objSsh=Net::SSH.start("xxx.xxx.xxx.xx",

"sshUser",

:Password=>"sshPass")

上面的方法很有效,例如,我可以获得ls的输出(我知道,这是最简单的simpleton任务)。

我遇到的问题是我需要使用不同的凭据从SSH会话进行Telnet,因此以下内容不符合我的目的:

ssh = Net::SSH.start("xxx.xxx.xxx.xxx",

:username=>"sshUser",

:password=>"sshPass"

)

s = Net::SSH::Telnet.new(

"Dump_log" => "/dev/stdout",

"Session" => ssh

)

那将使用相同的凭据进行Telnet,所以这不是我所需要的。

但是同时我不能使用以下内容,因为它只会尝试从执行计算机上进行Telnet,这不是必需的。

s = Net::SSH::Telnet.new(

"Dump_log" => "/dev/stdout",

"Host" => "0",

"Username" => "telnetUser",

"Password" => "telnetUser"

)

基本上,我需要使用不同的凭据通过SSH到计算机,然后使用“ telnet 0 xxxxx” Telnet到localhost,但是我一生都无法解决。

我试过在ssh提示符下运行telnet 0 xxxxx,但只是挂起了,大概是因为显示了用户名/密码提示符。

我在这里迷路了。 在正确方向踢球方面的任何帮助将不胜感激。

谢谢,

CJL。

更新1:

感谢cherrysoft的迅速而有益的答复。 我将研究我们是否能够将文件夹到其服务器上以直接通过SSH触发。 它将使生活更简单!

更新2:

好的,所以在无奈之下我尝试了一些尝试,这使我比以前更进一步。 以下代码通过SSH连接,基于SSH创建Telnet会话,通过输出简单的SSH命令确保一切正常,尝试启动Telnet会话....然后失败。

#Create SSH connection.

objSsh=Net::SSH.start("xxx.xxx.xxx.xxx",

"sshPass",

:password=>"sshPass")

#Crete a Net:SSH:Telnet object based on the SSH connection.

objTelnet = Net::SSH::Telnet.new("Session" => objSsh)

#Ensure simple SSH commands can still be run by outputting ls results.

p objTelnet.cmd("ls")

#Try to kick off a telnet session and show what is displayed.

p objTelnet.cmd("telnet 0 xxxxx")

#Wait for the Username prompt.

objTelnet.waitfor("Match" => /.*?Username:.$/)

#Enter username.

objTelnet.puts("telnetUser")

#Wait for password prompt.

objTelnet.waitfor("Match" => /.*?Password:.$/)

#enter password.

objTelnet.puts("telnetPass")

#Try the command.

p objTelnet.cmd("cluster stats")

它可以到达Telnet连接,但Waitfor调用似乎不起作用。 当以下行运行时,输出结果将提示输入用户名:

objTelnet.cmd("telnet 0 xxxxx")

"telnet 0 xxxxx\nTrying 0.0.0.0...\r\nConnected to 0.\r\nEscape character is '^]'.\r\nUsername: "

我本来希望Waitfor匹配输出中显示的内容,然后再输入Username。 这可能是RegEx问题吗? 我已经通过Rubular运行了它,似乎匹配了,但是我可能缺少语法相关的内容?

感谢你的宝贵时间。

CJL。

更新3和解决方案:

谢谢Kimmo Lehto。 只需进行少量的tweeking即可完美运行。 它仍然陷在Telnet登录中,但是当按如下所示传递凭据时(与用户/传递相反),它可以有效!

loginInfo = {"Name" => telnetUser,

"Password" => telnetpass,

"LoginPrompt" => /Username:/

}

objGateway = Net::SSH::Gateway.new(hostIp, user, :password => password)

objLocalPort = objGateway.open("localhost", port)

objTelnet = Net::Telnet::new("Host" => "127.0.0.1", "Port" => objLocalPort)

objTelnet.login(loginInfo)

objTelnet.cmd("cluster lrm res sum") { |c| print c}

objTelnet.close

objGateway.shutdown!

再次感谢您花费时间和精力解决此问题。

CJL出...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值