在ssh进入rails应用程序中的远程计算机后,我只是试图列出目录,但没有得到所需的输出,我在俯视什么?主机是IP。
Controller -
def index
@ssh_test = Net::SSH.start( :host =>'xx.x.xx.xx',:user => 'name', :password => 'secret' ) do |ssh|
result = ssh.exec!('ls')
puts result
end
end
gem 文件
gem 'net-ssh'
View
<h2><%= @ssh_test %></h2>
当前目录目录不应该显示在我的 View 中吗?感谢您的关注。
更新
这是更新的进度,似乎仍无法完全掌握。
before_filter :set_ssh, :only => [:index]
def index
@ssh_dir = Net::SSH.start( @host, @user, :password => @password ) do |ssh|
result = ssh.exec!('ls')
end
def set_ssh
@host = 'xx.x.xx.xx'
@user = 'user'
@password = 'password'
end
View -
<h1><%= @ssh_dir( host, user, password).inspect %></h1>
最佳答案
您需要返回结果,并且调用start的方式不正确,请尝试以下操作:
def index
@ssh_test = Net::SSH.start('xx.x.xx.xx','name', :password => 'secret' ) do |ssh|
result = ssh.exec!('ls')
result
end
end
这是根据http://net-ssh.github.com/net-ssh/在net-ssh版本2中调用start的正确方法。
编辑:回答在哪里放置您的配置。
如果您要使用的ssh服务器在所有环境中都是固定的,那么我可能会将其放在初始化程序中:
config/initializers/my_ssh_config.rb
将会有:
$SSH_HOST = 'xx.x.xx.xx'
$SSH_USERNAME = 'name'
$SSH_PASSWORD = 'secret'
注意,个人而言,我不会将用户名和密码存储在配置中,但也许首先尝试使其生效。 (我通常将其设置为环境变量,并执行$ SSH_PASSWORD = ENV ['SSH_PASSWORD']等)
然后,您的 Controller Action 将如下所示:
定义指数
@ssh_test = Net::SSH.start($ SSH_HOST,$ SSH_USERNAME,:password => $ SSH_PASSWORD)做| ssh |
结果= ssh.exec!('ls')
结果
结束
结束
您也可以将其添加到环境文件中(例如,test.rb,development.rb)。
关于ruby-on-rails - 简单的SSH测试Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033640/