2012-06-06 16 views
5

Sto provando a scrivere un programma java che si connetterà via ssh e farà un po 'di cose su un server al lavoro (redhat linux). La mia scatola è Windows. Ho letto di sshj e sto cercando di far funzionare l'esempio. Ho lavorato sulla maggior parte delle dipendenze e ora ho un problema con le chiavi pubbliche/private e sfortunatamente non ne so molto (si, è una tempesta perfetta di novità!). Ecco l'errore:in difficoltà con l'esempio sshj ('exec'): Impossibile verificare la chiave host `ssh-rsa` con impronta digitale

Exception in thread net.schmizz.sshj.transport.TransportException "principale": [HOST_KEY_NOT_VERIFIABLE] Impossibile verificare ssh-rsa chiave host con l'impronta digitale 5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d per myserver sulla porta 22

Ecco il codice:

import net.schmizz.sshj.SSHClient; 
import net.schmizz.sshj.common.IOUtils; 
import net.schmizz.sshj.connection.channel.direct.Session; 
import net.schmizz.sshj.connection.channel.direct.Session.Command; 

import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

/** This examples demonstrates how a remote command can be executed. */ 
public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     ssh.loadKnownHosts(); 
     //ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 

} 

Qualsiasi aiuto sarebbe apprezzato, grazie!

risposta

1

provare questo

public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     //ssh.loadKnownHosts(); 
     ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 
} 

Decommentate l'addHostKeyVerifier e commento loadKnownHosts. Dovrebbe funzionare.

8

solo provare questo

ssh.addHostKeyVerifier(new PromiscuousVerifier()); 

questo dovrebbe funzionare

+2

Questa non è una soluzione. In pratica stai dicendo di disabilitare la verifica della chiave host in quanto tale. – Matiss

Problemi correlati