2013-02-22 87 views
1

我只是試圖列出我的SSH目錄後,我的rails應用程序中的遠程機器的目錄,但我沒有得到所需的輸出,我忽略了什麼?主機是IP。簡單的SSH測試軌道

控制器 -

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' 

視圖

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

,不應將當前目錄中的目錄打印我的看法?感謝您的關注。

UPDATE

這裏被更新的進展,似乎仍然沒有完全掌握這一點。

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> 
+0

你可以試試我在下面提交的答案嗎?第二個版本,我不認爲Net :: SSH.start(:host =>'xx.x.xx.xx',:user =>'name',:password =>'secret')實際上是一個有效的電話開始。 – rainkinz 2013-02-23 00:32:04

回答

1

您需要返回的結果和你打電話開始時不正確,請嘗試以下方式:

def index 
    @ssh_test = Net::SSH.start('xx.x.xx.xx','name', :password => 'secret') do |ssh| 
    result = ssh.exec!('ls') 
    result 
    end 
end 

這是調用正確的方法從net-ssh的第2版開始,根據:http://net-ssh.github.com/net-ssh/

編輯:回答放哪裏把你的騙局圖。

如果你要使用固定適用於所有環境,那麼我可能只是把它放在一個初始化SSH服務器:

config/initializers/my_ssh_config.rb 

這將有:

$SSH_HOST = 'xx.x.xx.xx' 
$SSH_USERNAME = 'name' 
$SSH_PASSWORD = 'secret' 

注,我個人不會將用戶名和密碼存儲在配置中,但也許可以先嚐試一下才能使其工作。 (我通常使這是一個的環境變量,併爲此$ SSH_PASSWORD = ENV [ 'SSH_PASSWORD']等)

那麼你的控制器動作看起來像:

高清指數 @ssh_test =淨:: SSH .start($ SSH_HOST,$ SSH_USERNAME,:password => $ SSH_PASSWORD)do | ssh | 結果= ssh.exec!( 'LS') 結果 結束 結束

你也可以添加到您的環境文件(例如test.rb,development.rb)。

+0

我使用的是你鏈接到的版本,但我使用了上面的語法,因爲我不確定把這些變量放在哪裏?最好的做法是將這些放在config目錄中?而且,ruby不會默認返回最後一行,所以我可以通過iteself得到result = ssh.exec('ls')? – 2013-02-22 22:30:42

+0

是的,你應該簡單地把它作爲ssh.exec('ls')。 – rainkinz 2013-02-23 00:29:26

+0

我將更新我的答案以及放置配置的位置。 – rainkinz 2013-02-23 00:32:26