标签: net-ssh

如何使用Ruby的Net :: SSH库获得退出状态?

我有一段代码,只是试图在远程服务器上执行一个脚本,如果它失败了,我想打个电话跟进,想象一下:

require 'rubygems'
require 'net/ssh'
require 'etc'

server = 'localhost'

Net::SSH.start(server, Etc.getlogin) do |ssh|
  puts (ssh.exec("true")  ? 'Exit Success' : "Exit Failure")
  puts (ssh.exec("false") ? 'Exit Success' : "Exit Failure")  
end
Run Code Online (Sandbox Code Playgroud)

我希望(忽略stdout和stderr打印在我的设计示例中) - 但是第一行应该退出0,我希望Ruby会与之交互false并显示"退出失败"(当然,逻辑是错误的,三元需要被翻转) - 但第二行应以相反的状态退出,但事实并非如此.

我甚至无法在文档中找到有关如何执行此操作的任何内容,我有点担心我可能做错了吗?!

ruby ssh net-ssh

31
推荐指数
2
解决办法
1万
查看次数

在没有ssh-keygen的情况下生成SSH密钥对(私有/公共)

我正在研究需要生成SSH密钥对的Ruby/Rack应用程序.尽管我想ssh-keygen从应用程序调用,但我不能,因为它设计为在Heroku上运行,并且它们不支持调用该命令.

我已经能够在Ruby标准库中使用OpenSSL获取私有/公共RSA密钥,执行以下操作:

key = OpenSSL::PKey::RSA.generate(2048)
# => -----BEGIN RSA PRIVATE KEY----- ....
key.public_key
# => -----BEGIN RSA PUBLIC KEY----- ....
Run Code Online (Sandbox Code Playgroud)

遗憾的是,RSA公钥和SSH公钥不是一回事,即使它们可以使用相同的RSA密钥生成.SSH公钥类似于以下内容:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwA.....
Run Code Online (Sandbox Code Playgroud)

是否可以在Ruby中生成SSH密钥或将RSA密钥转换为SSH而不使用ssh-keygen

ruby ssh ssh-keys net-ssh

21
推荐指数
2
解决办法
9004
查看次数

无法使用Ruby和net/ssh连接密钥

我无法使用'net-ssh'gem通过ssh从ruby连接,获得Net :: SSH :: AuthenticationFailed.代码如下

require 'net/ssh'
keys = ["path_to_private_key"]
Net::SSH.start('host', 'user',:keys => keys, :verbose => :debug) do |ssh|
  #ssh code

end
Run Code Online (Sandbox Code Playgroud)

直接从命令行使用ssh工作:

ssh -i <path_to_private_key> user@host
Run Code Online (Sandbox Code Playgroud)

我的ssh API有问题吗?我尝试了'user @ host'和'user'作为用户名,结果相同.

这是调试输出:

D, [2011-07-26T19:42:00.135148 #3511] DEBUG -- net.ssh.transport.session[140b040]: establishing connection to host:22
D, [2011-07-26T19:42:00.164190 #3511] DEBUG -- net.ssh.transport.session[140b040]: connection established
I, [2011-07-26T19:42:00.164344 #3511]  INFO -- net.ssh.transport.server_version[140a3fc]: negotiating protocol version
D, [2011-07-26T19:42:00.192092 #3511] DEBUG -- net.ssh.transport.server_version[140a3fc]: remote is `SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu3'
D, [2011-07-26T19:42:00.192177 #3511] DEBUG -- net.ssh.transport.server_version[140a3fc]: local is `SSH-2.0-Ruby/Net::SSH_2.1.4 x86_64-linux'
D, …
Run Code Online (Sandbox Code Playgroud)

ruby net-ssh

11
推荐指数
1
解决办法
9577
查看次数

Ruby on rails - 无法加载这样的文件--net/ssh

我已经在这几天挣扎了......

当我尝试从视图中调用帮助器中的方法来执行ssh时,它会抛出该错误.

"加载以下文件时发生此错误:net/ssh"

但是当我将代码复制到test.rb文件中并从提示符执行时,ruby test.rb它会完美地连接.

可能是什么问题呢 ?我尝试了另一台计算机和相同的结果.

非常感谢,这就像我完成项目之前的最后一步!

问候,

application_helper.rb:

module ApplicationHelper
  def title(value)
    unless value.nil?
      @title = "#{value} | Eucc"      
    end
  end
  def execute
    require 'rubygems'
    require 'net/ssh'
    @hostname = "smtlmon02"
    @username = "gcaille"
    @password = "qaz1234"
    @cmd = "ls -al"
    @cmd2 = "sudo su - -c 'ls;date'"

    ssh = Net::SSH.start(@hostname, @username, :password => @password)
    res = ssh.exec!(@cmd)
    res2 = ssh.exec!(@cmd2)

    ssh.close
    File.open("output.txt", 'w') {|file| file.write(res2)}
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails net-ssh

11
推荐指数
1
解决办法
1万
查看次数

Ruby SSH禁用分页

有没有办法禁用或设置ruby Net-SSH连接的页面长度,所以我们不必更改远程设备上的设置?

在Cisco路由器中,我们将使用参数"终端长度0"来完成此操作,但在其他服务器上,我们不能使用任何类似的命令.可以通过Net-SSH lib设置吗?

ruby ssh net-ssh

11
推荐指数
1
解决办法
276
查看次数

错误"非绝对主页"通过Net:SSH

有问题的代码

Net::SSH.start('server name', 'user')
Run Code Online (Sandbox Code Playgroud)

这返回"非绝对的家"."用户"实际上确实有一个主目录.一种建议的方法是使用IdentityFile的完整路径修改〜/ .ssh/config.这并没有解决问题.

这个疯狂的部分是,如果通过irb或控制台调用代码可以正常工作.我们尝试从类方法(使用相同的代码)调用它时,它返回"非绝对主页"错误.

'user'也可以通过命令行ssh进入服务器而不会出现问题.服务器正在运行Ubuntu.

UPDATE

感谢@Phrogz - 解决这个问题的方法是将ENV ['HOME']设置为'/ home/deploy'.但是,我还没弄清楚为什么$ HOME被设置为"." 在服务器上.所以,在我或其他人明白这一点之前,我会在没有"答案"的情况下提出这个问题.必须手动设置HOME感觉更像是一个"黑客"而不是一个合适的解决方案,但它确实有效.

ruby net-ssh ruby-on-rails-3 ubuntu-11.10

8
推荐指数
1
解决办法
3822
查看次数

无法安装厨师,宝石版与net-ssh net-ssh-multi net-ssh-gateway冲突

使用rvm和一个空的gemset,我得到这个:

$ gem install chef --no-ri --no-rdoc
ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: chef requires net-ssh (~> 2.2.2); net-ssh-multi requires net-ssh (>= 2.6.5); net-ssh-gateway requires net-ssh (>= 2.6.5)
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过安装早期版本的net-ssh-gateway和net-ssh-multi来解决它,但net-ssh-multi版本1.1通过安装1.1.2使我感到困惑.

rubygems net-ssh chef-infra

7
推荐指数
3
解决办法
7259
查看次数

使用Ruby和net-ssh,如何使用Net :: SSH.start中的key_data参数进行身份验证?

我已经阅读了net-ssh文档,我仍然感到困惑.我可以手动验证(使用ssh -i ...),也可以将密钥放在文件中并使用:keys参数.但是,我不想使用:keys参数,我想使用:key_data参数.谁能举一个有效的例子?由于某种原因,直接将字符串输入:key_data不起作用,并且它给出错误:"既不是PUB键也不是PRIV键::嵌套asn1错误".当然我用Google搜索了,它基本上告诉我要确保密钥是PEM格式的.而且,当然是.有任何想法吗?如果需要,我可以提供更详细的信息......

ruby authentication net-ssh

6
推荐指数
2
解决办法
3939
查看次数

在rails应用程序的前端获取实时日志

在rails 3.x应用程序中,我使用net :: ssh并向远程pc运行一些命令.我想将实时日志显示给用户的browser.like,如果有两个命令在net :: ssh中运行执行即echo "Hello",echo "Bye"被传递,然后"你好"应显示在其execution.Here后立即整理浏览器是我使用了SSH连接,并在轨道上运行的应用程序在Ruby中命令代码

Net::SSH.start( @servers['local'] , @machine_name, :password => @machine_pwd, :timeout => 30) do |ssh|      
  ssh.open_channel do |channel|
    channel.request_pty         
    channel.exec("echo 'ssh started'")                                   
    channel.exec("ruby -v") 
    channel.exec("rails -v") 
    channel.exec("echo 'ssh Finished'") 


    channel.on_close do |ch|
      puts "****shell terminated****"
    end

    channel.on_eof do |ch|
      puts "****remote end is done sending data****"            
    end
    channel.on_extended_data do |ch, type, data|
      puts "****got stderr****: #{data.inspect}"
    end
    channel.on_data do |channel, data|
      puts "****ondata****: #{data} \n"                    
      puts "****channel****: #{channel} \n"          
      $logs << …
Run Code Online (Sandbox Code Playgroud)

ruby ssh ruby-on-rails net-ssh eventmachine

6
推荐指数
1
解决办法
843
查看次数

找不到有效的gem:证书验证失败

我正在尝试建立一个到远程服务器的ssh隧道,如下所述:从Heroku到Mysql Db的远程服务器的SSH

但我只是想下载宝石而挂断电话.我补充说:

# file: Gemfile
...
gem 'net-ssh-gateway', '~> 1.2.0'
Run Code Online (Sandbox Code Playgroud)

但是当我这样做bundle install(或者甚至只是gem install net-ssh在命令行上)时,我得到:

ERROR:  Could not find a valid gem 'net-ssh' (>= 0), here is why:
        Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/latest_specs.4.8.gz)
Run Code Online (Sandbox Code Playgroud)

根据net-ssh的README(https://github.com/net-ssh/net-ssh),我检查了我的OpenSSL绑定Ruby - 看起来没问题:

$ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
OpenSSL 1.0.1j 15 Oct 2014
Run Code Online (Sandbox Code Playgroud)

我不确定这是否相关,但是当我尝试下载.pem文件以获得gemfile的高安全性下载时:

$ curl -O https://raw.github.com/net-ssh/net-ssh/master/gem-public_cert.pem
Run Code Online (Sandbox Code Playgroud)

...它没有下载.pem文件,直接访问该URL会导致"未找到".

其他信息:

$ rake about
About your …
Run Code Online (Sandbox Code Playgroud)

ruby ssh openssl ruby-on-rails net-ssh

6
推荐指数
2
解决办法
6370
查看次数