Come usare sshpass?

22

Devo usare sshpass per avviare un comando remoto tramite SSH da un codice Java.

Se scrivo manualmente una console:

ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'

funziona perfettamente, ma richiede una password. Così ho provato a eseguire sshpass :

sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'

e nessuno di loro funziona.

    
posta Roman Rdgz 17.04.2013 - 10:43

10 risposte

21

Ho un comando come questo:

sshpass -pfoobar ssh -o StrictHostKeyChecking=no user@host command_to_run

e funziona.

Nel mio caso è necessario StrictHostKeyChecking=no perché i comandi vengono eseguiti su una tonnellata di host che vengono scambiati regolarmente (router di rete).

Per curiosità, ho provato a eseguirlo senza il comando, solo per vedere cosa stava succedendo. Risulta che sshpass tace (nessun output su stderr ). Ma il codice di ritorno in questo caso è 6 . Al momento della stesura di questo, questa era la revisione 50 e la costante di corrispondenza nel codice è RETURN_HOST_KEY_UNKNOWN , che ha senso.

Forse è lo stesso problema nel tuo caso?

Se non è il caso, hai citato correttamente il comando remoto?

    
risposta data exhuma 04.12.2013 - 10:23
4

sshpass funziona solo se la richiesta della password termina con assword: .

Se la tua richiesta di password è diversa potresti dover aggiustare il codice sorgente di sshpass per riconoscere il prompt che hai.

Ho visto prompt della password come Password for user@host: su alcuni sistemi, forse questo è il tuo problema.

    
risposta data rjs 14.07.2014 - 13:45
1

Hai configurato l'accesso senza password?

Login senza password con OpenSSH link

    
risposta data koni_raid 17.04.2013 - 10:52
1

C'è un sacco di modi per farlo, ecco la mia soluzione suggerita:

Innanzitutto, memorizzare la tua password in una variabile ti offre comandi più flessibili. sshpass ha un'opzione per questo:

-e : questa opzione consente di leggere la password dalla variabile di ambiente $SSHPASS

Hai due modi per impostare questa variabile:

  1. Imposta direttamente nel tuo codice:

    export SSHPASS='your_pass'
    
  2. Oppure chiedilo:

    readPassword () {
      echo Ssh Password: 
      read -s SSHPASS
      eval "export SSHPASS='""$SSHPASS""'"
    }
    
    # read password
    
    readPassword
    

Quindi esegui il tuo comando;

  1. Se il tuo comando è statico, eseguilo direttamente:

    sshpass -e ssh user@host << EOF
    mplayer '/media/data/myFavouriteSong.mp3'
    command2 parameter1 parameter2 parameter3 ...
    command3 parameter1 parameter2 parameter3 ...
    ...
    EOF
    
  2. Se il tuo comando sarà dinamico, usa questo:

    DYN_FILE_LOC='/media/data/myFavouriteSong.mp3'
    
    eval 'sshpass -e ssh user@host << EOF
    mplayer "$DYN_FILE_LOC"
    command2 parameter1 parameter2 parameter3 ...
    command3 parameter1 parameter2 parameter3 ...
    ...
    EOF'
    

spero che questo aiuti qualcuno.

    
risposta data veysiertekin 27.03.2015 - 14:59
1

Penso che tu voglia qualcosa come:

ssh -p yourpassword ssh user@ipaddress somecommand

Ad esempio, questo funziona per me:

sshpass -p mypassword ssh username@10.0.0.9 touch foo
    
risposta data benofben 07.02.2016 - 07:27
0

sshpass utilizza pseudo terminali e la pagina man include scuse per rotture occasionali. Puoi anche provare fd0ssh . Funziona se non è necessario inviare stdin a un processo sul computer remoto. Funziona se si emette un comando e si acquisisce il risultato.

    
risposta data Bruce 26.07.2013 - 17:44
0

la sintassi sshpass è

sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments

Si noti che non c'è spazio tra -p e la password.

Inoltre ho notato che devi connetterti con ssh almeno una volta manualmente per ottenere la chiave RSA della macchina a cui ti stai connettendo, per andare nel file ~/.ssh/known_hosts prima che sshpass ti permetta di connetterti.

Quindi dopo aver ottenuto la voce nel file known_hosts posso eseguire un comando come

sshpass -ffilename_with_password_in_it ssh user@server uname -a

e eseguirà il comando uname -a sul server remoto e restituirà i risultati allo standard sulla macchina locale.

    
risposta data BeowulfNode42 15.05.2014 - 08:16
0

Ciò di cui hai bisogno è -f -t -t -t

sshpass -p$PASS ssh -f -t -t -t $USER@$HOST $COMMAND

Inoltre potresti dover rimuovere "requiretty" da sudo config (/ etc / sudoers) sul computer remoto.

    
risposta data Ehsan 26.05.2014 - 21:27
0
  1. crea una chiave

    ssh-keygen -t rsa

  2. crea una cartella .ssh sul server remoto chiederà una password

    ssh $USER@SEVERNAME mkdir -p .ssh

  3. copia la chiave sul server remoto

    cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'

Controlla se richiede una password, altrimenti dovrebbe funzionare.

ssh $USER@SEVERNAME 'command'
    
risposta data VeggieVampire 08.06.2015 - 13:48
0

@exhuma ha avuto un esempio che mi ha portato a lavorare per me.

La password deve essere in forma di -pPassword (senza spazio)

anche le virgolette potrebbero essere necessarie: sshpass -p'Password&0' user@hostname

    
risposta data user3367115 29.09.2015 - 01:52

Leggi altre domande sui tag