Connettiti tramite SSH e digita la password automaticamente, senza utilizzare una chiave pubblica


20

Un server consente connessioni SSH, ma non utilizza l'autenticazione con chiave pubblica. Al momento non è in mio potere cambiarlo (a causa di difficoltà tecniche, non organizzative), ma lo farò al più presto!

Ciò di cui ho bisogno ora è eseguire i comandi sul server usando semplicemente il vecchio account + autenticazione password da uno script . Cioè, devo farlo in modo non interattivo. È possibile? E come lo faccio?

Il client che eseguirà lo script esegue Ubuntu Server 8.04. Il server esegue Cygwin e OpenSSH.


2
Quali sono le difficoltà tecniche con l'abilitazione dell'autenticazione basata su chiave? Forse dovresti invece porre questa domanda o in aggiunta a questa.
Zoredache,

1
Lo sto chiedendo. :-) serverfault.com/questions/125842/… Ho semplicemente bisogno di una via di fuga per ora, dato che ho battuto la testa su quella per un po '. Ma ovviamente il mio obiettivo è farlo funzionare a lungo termine.
Eliminato il

Risposte:


22

C'è un'utilità linux chiamata sshpass. Ti permette di fare esattamente quello che vuoi e prenderà una password del server come argomento della riga di comando o da un file (preferisco in questo modo, quindi non ho la mia password del server mostrata nella cronologia della shell) e la usi così:

sshpass -f file_with_password ssh user@server ls -la

Questo verrà eseguito su un server ed eseguito ls -la. Una cosa, tuttavia, devi prima inserire manualmente un server in un server (se non lo hai già fatto), quindi il server viene aggiunto al tuo ~/.ssh/known_hosts. Se non lo fai, sshpassnon funzionerà.


2
Questa non è una parte standard di OpenSSH, e letteralmente nessuna delle mie macchine (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) ce l'hanno ...
voretaq7

@ voretaq7: sshpass è un progetto SourceForge: sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe Penso che ti sia sfuggito il mio punto ("Il mondo intero non è la tua macchina Linux: prova a scegliere soluzioni che funzionano in altri posti"). L'uso della SSH_ASKPASSvariabile è una soluzione più generica che funziona su qualsiasi sistema con OpenSSH e non richiede l'installazione di software aggiuntivo. Per alcuni di noi (nelle industrie regolamentate) l'installazione di nuovo software innesca molto lavoro amministrativo.
voretaq7,

@ voretaq7 L'utilizzo SSH_ASKPASSnon funziona su tutti i sistemi. Anche se il client lo supporta, non funzionerà se il server lo utilizza keyboard-interactive. In realtà ho riscontrato questo problema durante la scrittura di uno script per distribuire un authorized_keysfile su un numero di macchine incorporate.
Kasperd,

8

Puoi usare Expect per farlo. Ovviamente, questo non è preferibile dal punto di vista della sicurezza, poiché richiederà l'utilizzo di uno script che contenga la password in chiaro. (Ma non accetterò questo punto da quando hai detto nella tua domanda che pensi di utilizzare l'autenticazione con chiave pubblica il prima possibile!)


Sembra che risolverà il mio problema! Lo controllerò domani. Non è la soluzione finale, ma offre un po 'di sicurezza. Quando ci penso, se l'utente dello script è l'unico autorizzato a leggere lo script. Quindi sarà sicuro come la mia chiave privata che è anche "solo" protetta dalle autorizzazioni del file system. O mi sono perso qualcosa?
Eliminato il

Tornerò con i risultati domani. :-) Grazie per avermi risposto!
Eliminato il

Sembra funzionare Ma sshpass è stato più facile per questo caso specifico IMHO.
Eliminato il

7

Dipende un po 'dal linguaggio di script che usi. Scrivo quasi tutto in Python ora, dove questo non è un problema. Sia pyssh che Paramiko ti permettono semplicemente di scrivere la password senza problemi.

Se hai intenzione di farlo con (ba) sh script e usi OpenSSH, diventa più difficile. OpenSSH ti impedisce esplicitamente di inserire le password nella riga di comando (poiché tutti gli utenti possono vedere la riga di comando usando qualcosa di simile ps -fe, che è un cattivo mojo). In questo caso dovrai interagire direttamente con il programma ssh e avere due opzioni:

  • Puoi scrivere una notevole quantità di codice di supporto, usando qualcosa come Expect.
  • Fai un hack usando la variabile SSH_ASKPASS, dicendogli di chiamare un'applicazione che restituisce la tua password ed esegui tutto come un processo batch per impedirne la lettura dal terminale.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.