Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSH和Ruby连接到交换机_Ruby_Ssh - Fatal编程技术网

使用SSH和Ruby连接到交换机

使用SSH和Ruby连接到交换机,ruby,ssh,Ruby,Ssh,我需要用SSH和Ruby连接到Cisco交换机。我遇到的问题是身份验证是不同的。使用PuTTY时,我会这样做:输入“登录身份”(任意值,无一致性),然后要求输入“用户名”和“密码”,如下屏幕: 交换机配置中的选项“SSH用户密码身份验证”已禁用,启用它不是一个选项 我最后的两次尝试: 1使用netssh Net::SSH.start(CISCO, USER) do |ssh| ssh.exec("echo hi") end 结果:Net::SSH::AuthenticationFai

我需要用SSH和Ruby连接到Cisco交换机。我遇到的问题是身份验证是不同的。使用PuTTY时,我会这样做:输入“登录身份”(任意值,无一致性),然后要求输入“用户名”和“密码”,如下屏幕:

交换机配置中的选项“SSH用户密码身份验证”已禁用,启用它不是一个选项

我最后的两次尝试:

1使用netssh

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错误。有解决方案吗?

您有两种选择:

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

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

硬编码示例:

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

@ruba是否使用SSH密钥作为身份验证选项?通常,硬编码登录名和密码不是最好的选择。@user2276204我无法启用此功能,因为我使用的交换机超过3k。我需要使用默认的config=/您无法比较使用Putty或其他SSH客户机与使用诸如Net::SSH之类的库所做的事情。在Putty等应用程序中有很多特例代码,用于处理各种SSH服务器中发现的特性,而Net::SSH使用的底层SSH库中没有。另外,根据来之不易的经验,我们发现Cisco的SSH实现会因操作系统的不同而在不同的设备之间发生变化。您还需要添加一个“Expect”功能,因为当您启用特权模式时,提示会发生变化。不知道,它似乎不喜欢代码上方的编号列表。我可以通过删除列表来“修复”它。