2013-05-06 46 views
1

我需要使用SSH和Ruby连接到思科交换机。我遇到的问题是认证不同。用腻子我这样做:进入“登录为”(任意值,没有一致),那么它要求“用户名”和“密码”,这样的画面:使用SSH和Ruby连接到交换机

putty

选项“SSH交换机配置中的用户身份验证通过密码被禁用并且启用它不是一个选项。

我的最后两个尝试:

1使用net-SSH

Net::SSH.start(CISCO, USER) do |ssh| 
    ssh.exec("echo hi") 
end 

结果:净:: SSH :: AuthenticationFailed

2使用net-SSH远程登录

tn = Net::SSH::Telnet::new("Host" => CISCO, 
"Timeout" => 60, 
"Prompt" => /^\login as:/) 

tn.cmd("\n") { |c| print c } 
tn.cmd("#{USER}\n") { |c| print c } 
tn.cmd("#{PASS}\n") { |c| print c } 
tn.print("echo oi") { |c| print c } 
tn.close 

结果:Net :: SSH :: AuthenticationFailed

我想我需要打开一个服务器的通道,并输入登录名,用户名和密码作为命令,但每次我收到AuthenticationFailed错误。任何解决方案

+1

@ruba是使用SSH密钥进行验证的选项?通常对登录名和密码进行硬编码并不是最佳选择。 – user2276204 2013-05-06 18:17:27

+0

@ user2276204我无法启用此功能,因为我正在处理超过3k个开关。我需要使用默认配置=/ – ruda 2013-05-06 18:27:14

+0

您无法比较如何使用Putty或其他SSH客户端来使用Net :: SSH等库。像Putty这样的应用程序中有很多特殊的代码来处理在各种SSH服务器中找到的特性,而且它不在Net :: SSH使用的底层SSH库中。另外,从来之不易的经验中,我们发现思科的SSH实施因设备操作系统的差异而在设备间发生变化。您还需要添加“期望”功能,因为在启用特权模式时提示会发生变化。 – 2013-05-06 18:59:21

回答

3

你有两个选择:

安装SSH密钥:这种方式是理想的,因为它不需要硬编码密码。要做到这一点,你需要生成密钥,并编辑密码的登录你的SSH配置下面是一个例子教程,HOWTO: set up ssh keys

硬编码密码:你可以做到这一点通过为用户添加密码在您的SSH连接

硬编码例如:

Net::SSH.start(CISCO, USER, :password => PASSWORD) do |ssh| 
    ssh.exec("echo hi") 
end 
+1

为什么codding snip在这里不起作用? – fotanus 2013-05-06 20:00:51

+0

不知道,它似乎不喜欢代码上方的编号列表。我能够通过删除列表来“修复”它。 – 2013-05-06 20:47:06

+0

@에이바谢谢;-) – fotanus 2013-05-06 21:40:33