2013-06-05 3 views
19

Voglio utilizzare SSH all'interno di uno script, ma questo script non verrà eseguito sulla mia macchina.Fornire la password al comando ssh all'interno dello script di bash, senza l'utilizzo di chiavi pubbliche e Expect

Nella mia implementazione ci sono due limitazioni.

  • non posso lavorare gli standard di guscio esterno, quindi non posso usare expect perché non so se sarà disponibile su questa macchina.
  • Non posso prevedere che questa macchina avrà public keys per SSH.

Quali sono le possibili opzioni-soluzioni?

Come posso fornire a ssh la password richiesta in modo automatico e sicuro senza aggiungere ulteriori dipendenze?

È possibile fornire la password all'interno dello script?

Grazie a tutti in anticipo :)

+0

sono altri linguaggi come Perl o Python disponibili? –

+0

normalmente sì, ma in python so che è possibile :) Grazie comunque – stratis

risposta

11

Prima di tutto: Non inserire segreti in chiaroa meno sai perché si tratta di una cosa sicura da fare (cioè hai valutato quale danno può essere fatto da un attaccante conoscendo il segreto).

Se stai bene con la messa segreti nello script, si potrebbe spedire una chiave SSH con esso ed eseguire in un ssh-agent shell:

#!/usr/bin/env ssh-agent /usr/bin/env bash 
KEYFILE=`mktemp` 
cat <<EOF> ${KEYFILE} 
-----BEGIN RSA PRIVATE KEY----- 
[.......] 
EOF 
ssh-add ${KEYFILE} 

# do your ssh things here... 

# Remove the key file. 
rm -f ${KEYFILE} 

Un vantaggio di usare le chiavi SSH è che si può facilmente utilizzare forced commands per limitare ciò che il keyholder può fare sul server.

Un approccio più sicuro sarebbe consentire allo script di eseguire ssh-keygen -f ~/.ssh/my-script-key per creare una chiave privata specifica per questo scopo, ma in tal caso sarebbe anche necessaria una routine per l'aggiunta della chiave pubblica al server.

+3

Inizio a concludere che generare una chiave privata per le esigenze dello script e dopo averlo rimosso sarà l'unica soluzione. Grazie mille – stratis

+0

Era la risposta più vicina alla mia domanda:) Grazie – stratis

1

Per quanto ne sappia non c'è possibilità accanto a usare i tasti o si aspettano, se si utilizza la riga di comando versione ssh. Ma ci sono collegamenti di libreria per la maggior parte dei linguaggi di programmazione come C, python, php, .... Potresti scrivere un programma in tale lingua. In questo modo sarebbe possibile passare automaticamente la password. Ma nota questo è naturalmente un problema di sicurezza, come la password verrà memorizzata in testo normale in quel programma

+0

grazie :) Sei stato utile almeno mostrandomi ciò che è possibile. Ho pensato di sviluppare in python ma le linee di codice per un comando ssh in Python è come 100 volte di più rispetto alla versione di shell ssh :) – stratis

+0

Il problema è giusto, che il comando 'ssh' si aspetta la password proveniente da un terminale. è per questo che si aspettano mentre simula un terminale. Forse si può fare lo stesso in un modo semplice. Non so come. Comunque dovresti trovare 100 righe usando google;) – hek2mgl

27

Installare sshpass, quindi lanciare il comando:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no your[email protected] 
+0

Grazie mille, ma non mi aspetto che il computer su cui eseguirò lo script abbia installato sshpass, questo è il motivo per cui non posso aspettarmi. – stratis

16

Per motivi di sicurezza è necessario evitare di fornire la password su una riga di comando altrimenti chiunque comando ps in esecuzione può vedere la tua password. Meglio usare sshpass programma di utilità come questo:

#!/bin/bash 

export SSHPASS="your-password" 
sshpass -e ssh -oBatchMode=no [email protected] 

potreste essere interessati a How to run the sftp command with a password from Bash script?

+0

Grazie mille, ma non mi aspetto che il computer su cui eseguirò lo script abbia sshpass installato, questo è il motivo per cui non posso aspettarmi. – stratis

+0

Sì, potrebbe non essere già installato ma è possibile scaricarlo dal collegamento fornito e compilarlo da soli. Non richiede alcun privilegio di amministratore. – anubhava

+0

Devo scaricarlo in tutti i computer su cui voglio eseguire lo script? Se è qualcosa che posso solo implementare nel mio codice, va bene, ma voglio solo creare uno script autonomo che sarà in grado di eseguire ovunque senza bisogno di permessi, pacchetti extra. Questa è la ragione per cui volevo rimanere allo standard. – stratis