6

net-ssh のドキュメントを読みましたが、まだ困惑しています。手動で (ssh -i ... を使用して) 認証することも、キーをファイルに配置して :keys パラメーターを使用することもできます。ただし、:keys パラメーターは使用したくありません。:key_data パラメーターを使用したいと考えています。誰でも実際の例を挙げることができますか? 何らかの理由で、文字列を :key_data に直接入力しても機能せず、「PUB キーでも PRIV キーでもない :: ネストされた asn1 エラー」というエラーが発生します。もちろん、私はそれをグーグルで検索しましたが、基本的にはキーがPEM形式であることを確認するように指示しています. そして、もちろんそうです。何か案は?必要に応じて、より詳細な情報を提供できます...

4

2 に答える 2

13

この質問はかなり古いものですが、同じ問題があり、解決したばかりなので、念のために答えを投げます。

次のコードでは、RSA キーを含む文字列がどこにもインデントされていないことに注意してください。キーの 2 行目には先行スペースがありません。キーを貼り付けたときに TextMate がこれをそこに置きました。それを削除すると、魅力的に機能しました。

#!/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
于 2012-07-01T00:29:02.443 に答える
9

ライブラリを掘り下げた後に自分で発見した情報をもう少し追加しています...

2.9.2 以降、key_data で提供されるキーのみを使用する場合は、key_data をロードする前に空白のキー セットも指定する必要があります。そうしないと、いくつかのデフォルト キーがロードされます。

私の場合、ロードしようとした ID ファイルの 1 つがパスフレーズで保護されていたため、パスフレーズを要求されましたが、その ID ファイルをまったく使用するつもりはありませんでした。

上記の例を 2.9.2 で使用すると、次のようにして同じ効果を得ることができます。

#!/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
于 2015-02-13T17:14:36.290 に答える