我正在尝试以下示例代码:http://www.ruby-doc.org/gems/docs/n/net-ssh-shell-0.2.0/README_rdoc.html
require 'net/ssh'
require 'net/ssh/shell'
Net::SSH::start('host', 'user', :password=>'password') do |ssh|
puts ssh.exec!("hostname")
ssh.shell do |sh|
sh.execute "cd /usr/local"
sh.execute "pwd"
sh.execute "export FOO=bar"
sh.execute "echo $FOO"
p=sh.execute "grep dont /tmp/notexist"
puts "Exit Status:#{p.exit_status}"
puts "Command Executed:#{p.command}"
end
end
我确实传了密码,并确认我是通过ssh.exec!("hostname")
测试登录的。
我期待pwd
和echo
命令的一些输出,但我没有看到它。另外,程序/脚本最后会挂起。我在Windows上使用Ruby 1.9.3p429(2013-05-15)[i386-mingw32]。我在OS X和Ubuntu上测试了SSH服务器。
这是我的输出。跟踪来自我做Ctrl-C:
C:\sb>ruby test.sh
Exit Status:
Command Executed:grep dont /tmp/notexist
C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/ruby_compat.rb:22:
in `select': Interrupt
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/ruby_compat.rb:22:in `io_select'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:201:in `process'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `block in loop'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `loop'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `loop'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:110:in `close'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh.rb:191:in `start'
from test.sh:5:in `<main>'
答案 0 :(得分:1)
这里的答案是,除了您确定要输出的内容之外,您将看不到输出。然后,您需要以正常方式指示返回要呈现或输出的命令。
在此代码中,只有两行输出,它们是:
puts "Exit Status:#{p.exit_status}"
puts "Command Executed:#{p.command}"
我相信由于等待密码,你似乎没有在程序上取得进展。当我运行此代码并具有仅密钥的ssh访问权限时,它会继续。当它连接到我的本地系统时,它似乎正在等待我的密码。
这是ssh
会话,当您想要离开会话时,您需要退出会话。
仍然需要会话输出,您需要执行与主机名输出相同的操作。你用了put。对于我上面提到的最后两个,你也会这样做。
它没有挂起,只是没有告诉你完成了安全shell。