Исключение «Не удалось загрузить known_hosts» с использованием SSHJ - PullRequest
9 голосов
/ 02 сентября 2010

Я получаю исключение при использовании SSHJ.

Вот как я это реализовал:

public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 
    final SSHClient ssh = new SSHClient(); 
    ssh.loadKnownHosts(); 
    ssh.connect("serverName"); 
    try{ 
        ssh.authPublickey("myUserId"); 
        final Session session = ssh.startSession(); 
        try{ 
            final Command cmd = session.exec("net send myMachineName Hello!!!"); 
            System.out.println(cmd.getOutputAsString()); 
            System.out.println("\n Exit Status: "+cmd.getExitStatus()); 
        }finally{ 
            session.close(); 
        } 
        }finally{ 
            ssh.disconnect(); 
        }    
    } 

} 

Но я получаю следующее исключение:

Exception in thread "main" java.io.IOException: Could not load known_hosts
    at net.schmizz.sshj.SSHClient.loadKnownHosts(SSHClient.java:528)
    at SSHTEST.main(SSHTEST.java:25)

Что я делаю не так?

Ответы [ 3 ]

16 голосов
/ 26 февраля 2011

Используйте следующий код

final SSHClient ssh = new SSHClient();  

ssh.addHostKeyVerifier(  
    new HostKeyVerifier() {  
        public boolean verify(String arg0, int arg1, PublicKey arg2) {  
            return true;  // don't bother verifying  
        }  
    }  
);  

ssh.connect("LocalHost");
5 голосов
/ 04 сентября 2010

Удалите вызов метода loadKnownHosts (), который, как упоминал erickson, по умолчанию проверяет в ~ / .ssh / known_hosts (хотя вы также можете указать местоположение в качестве аргумента) и замените его на:

ssh.addHostKeyVerifier("public-key-fingerprint");

Чтобы выяснить, что такое «отпечаток пальца», можно использовать извилистый способ подключения без этого утверждения - вы узнаете из исключения; -)

3 голосов
/ 02 сентября 2010

Звучит так, будто он пытается прочитать файл "known_hosts", но не может найти его или, возможно, в неправильном формате.

Файл известных хостов SSH записывает открытый ключ для различных хостов, чтобы предотвратить некоторые спуфинговые атаки. Обычно он находится в ~ / .ssh / known_hosts. Попробуйте создать там пустой файл и посмотрите, удовлетворяет ли это библиотека.

В документации библиотеки, вероятно, указаны необходимые файлы конфигурации.

...