如何获取ssh命令的输出?

时间:2014-07-12 05:26:00

标签: ruby ssh

我想以编程方式检查是否有人为GitHub正确设置了SSH密钥。我知道我可以在Ruby中使用`ssh -T git@github.com`。但是,我想将ssh输出保存在变量中。

我目前的代码是:

github_response = `ssh -T git@github.com`
unless github_response.start_with?('Hi')
  puts 'Please set up your GitHub ssh keys'
end

`ssh -T git@github.com`输出响应(从&#34开始;嗨")。但github_response变量为nil

如何将`ssh -T git@github.com`的输出分配给github_response

2 个答案:

答案 0 :(得分:3)

您的示例失败,因为Hi xxx! You've successfully authenticated....消息不是来自stdout,而是来自stderr。

> require 'open3'
=> true
> stdin, stdout, stderr, wait_thr = Open3.popen3('ssh -T git@github.com')
=> [#<IO:fd 8>, #<IO:fd 9>, #<IO:fd 11>, #<Thread:0x007f89ee1149a8 sleep>]

> stdout.gets
=> nil
> stderr.gets
=> "Hi halfelf! You've successfully authenticated, but GitHub does not provide shell access.\n"

答案 1 :(得分:1)

您可以为详细输出添加-v,然后将大部分连接信息转储到stdout。从该日志中,您可以查找服务器是否接受ssh客户端提供的任何密钥