2011-10-24 31 views
6

私は誰かから助けが必要なsshj(sshj v0.6.0を使用しています)に奇妙な問題がありました。 公開鍵を使用した認証は一部のマシンでは問題なく動作しますが、他のマシンではうまく動作せず、以下のエラーが表示されます。"[HOST_KEY_NOT_VERIFIABLE]がsshjの" ssh-rsa`ホストキーを確認できませんでした

私が作ることができる唯一の違いは、UNIX ID問題のすなわちのcoonradtのみ、以下のエラーが

をトリガされているかのボックスにの〜/ .ssh/configの下に、下記の構成のセットアップを持っているようだということでした
Host * 
    Protocol 1,2 
    FallBackToRsh no 
    ForwardAgent yes 
    ForwardX11 yes 
    PasswordAuthentication yes 
    RhostsAuthentication no 
    RhostsRSAAuthentication no 
    RSAAuthentication yes 
    NoHostAuthenticationForLocalhost yes 
    StrictHostKeyChecking no 
    KeepAlive yes 

上記の設定ファイルから、問題のIDがプロトコル1,2を使用することになっていることを知りました。これは私の失敗と関係があると思われます(私はそれについてはよく分かりませんが

これがうまく動作する他のすべてのUNIX IDについては、このような設定ファイルはありません。

PS:UNIX ID「coonradt」の設定を変更することはできません。このIDはセントラルhudsonサーバーによって使用されているためです。誰かが続いて私がここに間違っているかもしれないものにと

を示唆して助けてくださいできれば

は、お願い申し上げ、私は見ていますエラーです:

Oct 24, 2011 2:30:37 AM net.schmizz.sshj.DefaultConfig initCipherFactories 
WARNING: Disabling high-strength ciphers: cipher strengths apparently limited by JCE policy 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.TransportImpl init 
INFO: Client identity string: SSH-2.0-SSHJ_0_6_0 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.TransportImpl init 
INFO: Server identity string: SSH-1.99-OpenSSH_4.3 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.KeyExchanger sendKexInit 
INFO: Sending SSH_MSG_KEXINIT 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.KeyExchanger handle 
INFO: Received SSH_MSG_KEXINIT 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.kex.AbstractDHG init 
INFO: Sending SSH_MSG_KEXDH_INIT 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.KeyExchanger handle 
INFO: Received kex followup data 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.kex.AbstractDHG next 
INFO: Received SSH_MSG_KEXDH_REPLY 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.TransportImpl die 
SEVERE: Dying because - net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] Could not verify `ssh-rsa` host key with fingerprint `ca:0b:b3:7f:53:5a:e3:bc:bf:44:63:d8:2d:26:c0:41` for `mymachine.domain.com` on port 22 
Oct 24, 2011 2:30:38 AM net.schmizz.concurrent.Promise tryRetrieve 
SEVERE: <<kex done>> woke to: net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] Could not verify `ssh-rsa` host key with fingerprint `ca:0b:b3:7f:53:5a:e3:bc:bf:44:63:d8:2d:26:c0:41` for `mymachine.domain.com` on port 22 
Oct 24, 2011 2:30:38 AM net.schmizz.sshj.transport.TransportImpl setService 
INFO: Setting active service to null-service 
Oct 24, 2011 2:30:38 AM com.test.jaws.execution.ssh.impl.SSHJClientImpl$ExceptionHandler handleSevereCondition 
SEVERE: mymachine.domain.com is not added to your /x/home/coonradt/.ssh/known_hosts file. 
Throwable occurred: net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] Could not verify `ssh-rsa` host key with fingerprint `ca:0b:b3:7f:53:5a:e3:bc:bf:44:63:d8:2d:26:c0:41` for `mymachine.domain.com` on port 22 
    at net.schmizz.sshj.transport.KeyExchanger.verifyHost(KeyExchanger.java:222) 
    at net.schmizz.sshj.transport.KeyExchanger.handle(KeyExchanger.java:373) 
    at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:477) 
    at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127) 
    at net.schmizz.sshj.transport.Decoder.received(Decoder.java:195) 
    at net.schmizz.sshj.transport.Reader.run(Reader.java:72) 
+0

私は問題が本当にcoonradtのユーザー設定であると思う、重大な注意を参照してください: "SEVERE:mymachine.domain.comは/x/home/coonradt/.ssh/known_hostsファイルに追加されません。 "あなたはおそらくこれを修正する必要があります;-) –

+0

こんにちは、すみません、返信ありがとうございます。しかし、あなたはどのような修正プログラムをユーザーにwrtする必要がありますようにお勧めできますか?それは私がプロトコル設定ファイルのセクションにあるのでしょうか?sshjが何らかの形でプロトコルのバージョンを指定できるようにしたいと思っていました。(これはあまりにも怪しいですが、どのようにsshが動作するか) –

+0

実際には、プロトコルとはほとんど関係がありません(実際には、このメッセージに関しては何もありません)。 '/ x/home/coonradt /この場合、ssh/known_hosts 'にはクライアントの指紋が含まれているはずです。私は、すべてのマシンがそのユーザーを使ってそのサーバーに接続できるわけではないというセキュリティ対策を見つけたと思います。 –

答えて

12

どのようにこのマシンのHostKeyVerifierの追加について?

sshClient.addHostKeyVerifier("ca:0b:b3:7f:53:5a:e3:bc:bf:44:63:d8:2d:26:c0:41"); 

known_hostsファイルは、$(のuser.home)/ではないので、それは自動的には行われません。その理由は、おそらくです。SSH/known_hostsに。特定の場所から既知のホストを明示的にロードすることもできます。

sshClient.loadKnownHosts(new File("path_to_known_hosts")); 
+0

@Shikar:問題はknown_hostファイルとは何の関係もないと思います。私は、sshjが私の限られた知識の中でssh v1プロトコルを扱っていないことを理解しました。 –

+1

@Shikar:https://gist.github.com/1321719をご覧ください。 –

+0

@Shikar:known_hostsファイルが〜/ .sshフォルダの下にあることを忘れてしまい、その利用可能性を確認しました。 –

0

代替回答の場合は、接続しようとしているホスト名がknown_hostsファイルと完全に一致していることを確認してください。私が作っていた例の間違いは、完全なURL bob.insidenetwork.pvtに接続しようとしていたが、私のknown_hostsファイルには、エントリとしてのみbobを持っていた...私は手動で私は全体のURLを入力するにはあまりにも怠惰なんだsshときので

7
try { 
    ssh.connect(envConf.getIp(), port); 
} catch (TransportException e) { 
    if (e.getDisconnectReason() == DisconnectReason.HOST_KEY_NOT_VERIFIABLE) { 
     String msg = e.getMessage(); 
     String[] split = msg.split("`"); 
     String vc = split[3]; 
     ssh = new SSHClient(); 
     ssh.addHostKeyVerifier(vc); 
     ssh.connect(envConf.getIp(), port); 
    } else { 
     throw e; 
    } 
} 
ssh.authPassword(envConf.getName(), envConf.getPw()); 
ssh.newSCPFileTransfer().download(envConf.getHomePath() + FilePath, toPath); 
8

あなたが任意の検証なしにすべてのキーを受け入れるようにSSHクライアントを設定することが

SSHClient sshClient = new SSHClient(); 
sshClient.addHostKeyVerifier(new PromiscuousVerifier()); 
... 
-1

それは私の作品(キー照合をホスト無視):

try (final SSHClient sshClient = new SSHClient()) { 
    sshClient.addHostKeyVerifier(new PromiscuousVerifier()); 
    KeyProvider keys = sshClient.loadKeys("path_to_private_key.ppk"); 
    sshClient.connect("hostname"); 
    sshClient.authPublickey("username", keys); 
} catch (IOException e) { 
} 
+1

例外を破棄するのは悪い習慣です。 – Kenster