2013-08-28 11 views
0

net-ssh API을 참조하면 yaml에서 오는 연결 매개 변수를 전달하는 "가장 좋은"방법은 무엇입니까?ssh 잘못된 인수 수

오류 :

[email protected]:~/ruby$ 
[email protected]:~/ruby$ ruby ssh.rb 
{:host=>"localhost", :user=>"me", :port=>123, :password=>"mypassword"} 
/home/thufir/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.6.8/lib/net/ssh.rb:165:in `start': wrong number of arguments (1 for 2..3) (ArgumentError) 
    from ssh.rb:14:in `<main>' 
[email protected]:~/ruby$ 

코드 :

#!/usr/bin/env ruby 
require 'rubygems' 
require 'net/ssh' 
require 'yaml' 
require 'pry' 

conn = YAML.load_file('conn.yml') 

params = {:host => conn['host'], :user => conn['user'], 
      :port => conn['port'],:password => conn['password']} 

puts params 

Net::SSH.start(params) do |ssh| 
    puts 'hi' 
end 

YAML :

user: me 
password: mypassword 
port: 123 
host: localhost 

그것은 단지 하나의 모 놀리 식 개체를 전달할 수 있습니까? 또는 호스트, 사용자 등으로 분해해야합니까? 알았어?

답변

4

hostuser 인수는 options 해시의 일부가 아닌 위치 지정 인수로 지정해야합니다. 따라서 :

Net::SSH.start(conn['host'], conn['user'], port: conn['port'], password: conn['password']) do |ssh| 
    # ... 
end 

아니면 그냥 직접 모든 YAML 키 - 값 쌍을 통과 할 수있다 : 야생의

Net::SSH.start(conn.delete('host'), conn.delete('user'), conn) do |ssh| 
    # ... 
end 
+0

, 당신은 같은 날 YAML 키 - 값 쌍을 전달할 수 몰랐어요! 내 서버가 ssh를 허용하지 않는다고 생각하기 때문에 실제로 테스트 할 수는 없지만 매우 흥미 롭습니다. 모든 API를 하나의 해시로 전달할 수 있다면 API가 더 좋을까요? 홀수, 위치 인수. – Thufir