1

I am simply trying to list the directories after I ssh into a remote machine in my rails app but I am not getting the desired output, what is am I overlooking? The host is an 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

gemfile-

gem 'net-ssh'

view

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

Shouldn't the current directories directories print to my view? Thanks for your attention.

UPDATE

Here is updated progress, still don't seem to fully grasp this.

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

個人的には、ユーザー名とパスワードを構成に保存しないことに注意してください。ただし、機能させるために、最初にそれを試してみてください。(通常、これをenv varにして、$ SSH_PASSWORD = ENV ['SSH_PASSWORD']などを実行します)

その場合、コントローラーのアクションは次のようになります。

def index @ssh_test = Net :: SSH.start($ SSH_HOST、$ SSH_USERNAME、:password => $ SSH_PASSWORD)do | ssh | result = ssh.exec!('ls')result end end

これを環境ファイル(test.rb、development.rbなど)に追加することもできます。

于 2013-02-22T21:41:36.733 に答える