2011-08-02 7 views
5

Przeczytałem dokumentację net-ssh i wciąż jestem zakłopotany. Potrafię uwierzytelniać ręcznie (używając ssh -i ...), a także umieszczając klucz w pliku i używając parametru: keys. Jednak nie chcę używać parametru: keys, chcę użyć parametru: key_data. Czy ktoś może podać przykład pracy? Z jakiegoś powodu, bezpośrednie podawanie łańcucha do: key_data nie działa i daje błąd: "Ani klawisz PUB, ani klucz PRIV :: zagnieżdżony błąd asn1". Oczywiście googlowałem i to zasadniczo mówi mi, żebym upewnił się, że klucz jest w formacie PEM. I, oczywiście, jest. Jakieś pomysły? W razie potrzeby mogę podać bardziej szczegółowe informacje ...Przy użyciu Ruby i net-ssh, w jaki sposób uwierzytelnić przy użyciu parametru key_data przez Net :: SSH.start?

Odpowiedz

9

Widzę to pytanie w dość starym, ale i tak mam zamiar dać ci odpowiedź na wszelki wypadek, ponieważ miałem ten sam problem i właśnie go rozwiązałem.

W poniższym kodzie zauważ, że ciąg zawierający klucz RSA nie jest nigdzie wcięty. Druga linia klucza nie ma w nim żadnej wiodącej przestrzeni. TextMate umieścił to tam, kiedy wkleiłem klucz. Usunąłem go i zadziałało jak czar.

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

HOST = '172.20.0.31' 
USER = 'root' 

KEYS = [ "-----BEGIN RSA PRIVATE KEY----- 
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU 
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0= 
-----END RSA PRIVATE KEY-----" ] 

Net::SSH.start(HOST, USER, :key_data => KEYS, :keys_only => TRUE) do|ssh| 
result = ssh.exec!('ls') 
puts result 
end 
+0

coraz '/usr/share/ruby/2.0/socket.rb:232:in 'getaddrinfo': brak niejawnej konwersji Array na String (TypeError) ' – sixty4bit

6

Dodaję trochę więcej informacji odkryłem sobie po kopanie wokół biblioteki ...

Od pkt 2.9.2, jeśli zamiarem jest użycie klucza dostarczonego w key_data, ty musi również określić pusty zestaw kluczy przed załadowaniem twoich danych key_data, lub załaduje niektóre klucze domyślne.

W moim przypadku jeden z plików tożsamości, który próbował załadować, był chroniony hasłem, więc poprosił mnie o podanie hasła, choć moim zamiarem było nie używać tego pliku identyfikatora.

Korzystając z przykładu powyżej, w pkt 2.9.2, można uzyskać ten sam efekt, robiąc coś takiego:

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

HOST = '172.20.0.31' 
USER = 'root' 

KEYS = [ "-----BEGIN RSA PRIVATE KEY----- 
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU 
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0= 
-----END RSA PRIVATE KEY-----" ] 

Net::SSH.start(HOST, USER, :keys => [], :key_data => KEYS, :keys_only => TRUE) do|ssh| 
result = ssh.exec!('ls') 
puts result 
end 
Powiązane problemy