1

我只是想在我的 rails 应用程序中 ssh 到远程机器后列出目录,但我没有得到所需的输出,我忽略了什么?主机是一个IP。

控制器-

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 'net-ssh'

看法

<h2><%= @ssh_test %></h2>

当前目录不应该打印到我的视图吗?感谢您的关注。

更新

这是更新的进度,似乎仍然没有完全掌握这一点。

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

看法-

<h1><%= @ssh_dir( host, user, password).inspect %></h1>
4

1 回答 1

1

您需要返回结果并且您调用 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'] 等)

然后您的控制器操作将如下所示:

def index @ssh_test = Net::SSH.start($SSH_HOST, $SSH_USERNAME, :password => $SSH_PASSWORD) 做 |ssh| 结果 = ssh.exec!('ls') 结果结束结束

您还可以将其添加到您的环境文件(例如 test.rb、development.rb)。

于 2013-02-22T21:41:36.733 回答