【问题标题】:Connect to a Switch with SSH and Ruby使用 SSH 和 Ruby 连接到交换机
【发布时间】: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 实施因操作系统差异而因设备而异。您还需要添加“期望”功能,因为启用特权模式时提示会发生变化。

标签: ruby ssh


【解决方案1】:

你有两个选择:

设置 SSH 密钥:这种方式非常理想,因为它不需要硬编码密码。为此,您需要生成密钥并编辑 SSH 配置以实现无密码登录。这是一个示例教程,HOWTO: set up ssh keys

硬编码您的密码:您可以通过在 SSH 连接中为您的用户添加密码来实现此目的

硬编码示例:

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

【讨论】:

  • 不知道,好像不喜欢代码上面的编号列表。我能够通过删除列表来“修复”它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多