【发布时间】:2013-04-30 12:58:30
【问题描述】:
我需要使用 SSH 和 Ruby 连接到 Cisco 交换机。我遇到的问题是身份验证不同。使用 PuTTY 我会这样做:输入“登录身份”(任何值,不一致),然后它会询问“用户名”和“密码”,就像这个屏幕:
交换机配置中的“SSH User Authentication by Password”选项已禁用,无法启用。
我最后的两次尝试:
1 使用 Net-SSH
Net::SSH.start(CISCO, USER) do |ssh|
ssh.exec("echo hi")
end
结果:Net::SSH::AuthenticationFailed
2 使用 Net-SSH-Telnet
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 错误。有什么解决办法吗?
【问题讨论】:
-
@ruba 是否使用 SSH 密钥进行身份验证?通常硬编码登录名和密码并不是最好的选择。
-
@user2276204 我无法启用此功能,因为我使用的交换机数量超过 3k。我需要使用默认配置 =/
-
您无法将使用 Putty 或其他 SSH 客户端的方式与使用 Net::SSH 之类的库进行比较。在像 Putty 这样的应用程序中有很多特殊情况的代码,用于处理各种 SSH 服务器中发现的特性,它们不在 Net::SSH 使用的底层 SSH 库中。此外,根据来之不易的经验,我们发现 Cisco 的 SSH 实施因操作系统差异而因设备而异。您还需要添加“期望”功能,因为启用特权模式时提示会发生变化。