La documentazione di Ganymed SSH-2
Prima di elencare alcune delle funzionalità più avanzate di Ganymed SSH-2 for Java, è importante sottolineare che la documentazione è disponibile online nonché inclusa a corredo del codice sorgente e dell’archivio .jar
, e contiene tutti i dettagli relativi ai metodi qui trattati (e non solo).
Per accedervi, è sufficiente aprire il file index.html
all’interno della directory javadoc
, disponibile dopo avere scompattato l’archivio .zip
precedentemente scaricato dal sito ufficiale. In alternativa possiamo leggerne i contenuti direttamente tramite l’apposita pagina del sito ufficiale.
Detto questo, non rimane che elencare interessanti funzionalità di SSH rese disponibili, su Java, dalla nostra libreria. Potremo utilizzarle per migliorare o adattare il codice proposto in precedenza, sulla base delle necessità più diverse.
Autenticazione
Abbiamo visto che è possibile autenticarsi al server SSH tramite un nome utente ed una password. Ma uno dei grandi vantaggi di SSH è l’autenticazione a chiave pubblica, mediante la quale possiamo utilizzare una coppia di chiavi per accedere al server senza specificare la password. Ciò può risultare comodo in tantissimi scenari.
Per utilizzare questo metodo di autenticazione, dobbiamo ovviamente creare prima una coppia di chiavi sul server. Su Linux, utilizzando il pacchetto di OpenSSH (disponibile sulla maggior parte delle principali distribuzioni) possiamo affidarci al comando seguente:
ssh-keygen -t rsa -b 2048
Abbiamo scelto, così, di creare una coppia di chiavi RSA (potremmo utilizzare l’opzione "dsa", ma non ci interessa questo tipo di dettaglio), con una lunghezza di 2048 bit. Entrambe saranno generate in un formato standard chiamato PEM, necessario per l’utilizzo con Ganymed SSH-2.
Durante la fase di creazione ci verrà chiesta una passphrase - utilizzata per generare le due chiavi - ed il nome della chiave - che sarà assegnato ai file generati. Il file con estensione .pub
sarà la chiave pubblica; l’altro file conterrà invece quella privata (che utilizzeremo).
A questo punto possiamo sfruttare due metodi della classe Connection
di Ganymed SSH-2; il primo metodo
authenticateWithPublicKey(String user, char[] pemPrivateKey, String password)
richiede il nome utente, una stringa (o un array di caratteri) contenente la chiave privata in formato PEM, e la password che sarà eventualmente utilizzata per decifrare la struttura del file PEM (se quest’ultimo non è cifrato, la password sarà ignorata).
Il secondo metodo
authenticateWithPublicKey(String user, File pemFile, String password)
effettua sostanzialmente le stesse operazioni del precedente, ma accetta come input un oggetto File
che faccia riferimento al file PEM della chiave (anziché una stringa come nel caso precedente).
Infine, per completezza, consideriamo anche il caso in cui vogliamo scoprire quale metodo di autenticazione è supportato dal server SSH a cui vogliamo connetterci. A tal fine possiamo utilizzare il codice seguente:
if (connection.isAuthMethodAvailable(getUsername(), "publickey")) {
// autenticazione a chiave pubblica supportata
} else {
// autenticazione a chiave pubblica non supportata
}
if (connection.isAuthMethodAvailable(getUsername(), "password")) {
// autenticazione tramite password supportata
} else {
// autenticazione tramite password non supportata
}
Si noti che potrebbero essere supportati anche più metodi di autenticazione.
Nel prossimo capitolo verranno analizzate la gestione sincrona dell’output e gli strumenti per copiare file remotamente da un server ad un client SSH e viceversa.