2013-02-01 6 views
10

Stiamo provando a migliorare l'automazione di alcuni processi del server; usiamo tessuto. Prevedo di dover gestire più host, e ciò significa che le connessioni SSH devono essere fatte ai server che non sono stati precedentemente inseriti in SSH. Se ciò accade, SSH richiede sempre la verifica della connessione, che interromperà l'automazione.Come passare le opzioni SSH con Fabric?

Ho lavorato a questo problema, nello stesso processo, usando l'opzione -o stricthostkeychecking=no su un comando SSH che uso per sincronizzare il codice con rsync, ma dovrò anche usarlo per le chiamate con Fabric.

C'è un modo per passare le opzioni specifiche di ssh a Fabric, in particolare quella che ho menzionato sopra?

risposta

8

La risposta breve è:

  1. Per i nuovi padroni di casa, niente è necessaria. env.reject_unknown_hosts predefinito su False
  2. Per gli host noti con chiavi modificate, env.disable_known_hosts = True deciderà di procedere con la connessione agli host modificati.

Leggi voi docs Olde: http://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts

La biblioteca paramiko è in grado di caricare il vostro file di known_hosts, e sarà quindi confrontare ogni host si connette a, con che la mappatura. Le impostazioni sono disponibili per determinare cosa succede quando un host sconosciuto (un host il cui nome utente o IP non si trova in known_hosts) si vede:

  • Rifiutare: la chiave host viene respinto e la connessione non è fatta . Ciò si traduce in un'eccezione Python, che interromperà la sessione Fabric con un messaggio che l'host è sconosciuto.
  • Aggiungi: la nuova chiave host viene aggiunta all'elenco di memoria degli host conosciuti, viene stabilita la connessione e le cose continuano normalmente. Nota che questo non modifica il tuo file known_hosts su disco!
  • Chiedi: non ancora implementato a livello di tessuto, questa è un'opzione della libreria paramiko che comporterebbe la richiesta all'utente circa la chiave sconosciuta e se accettarla.

se rifiutare o aggiungere host, come sopra, è controllata in tessuto tramite l'opzione env.reject_unknown_hosts, che è falso per impostazione predefinita per l'amor di convenienza. Riteniamo che questo sia un compromesso valido tra la convenienza e la sicurezza ; chi si sente diversamente può facilmente modificare i propri file fab a livello di modulo per impostare env.reject_unknown_hosts = True.

http://docs.fabfile.org/en/1.5/usage/ssh.html#known-hosts-with-changed-keys

host noti con le chiavi modificate

Il punto di monitoraggio chiave/impronte digitali di SSH è così che attacchi man-in-the-middle possono essere rilevati: se un utente malintenzionato redirect il tuo traffico SSH verso un computer sotto il suo controllo e finge di essere il il tuo server di destinazione originale, le chiavi dell'host non corrisponderanno.Pertanto, il comportamento predefinito di SSH (e della sua implementazione Python) è interrompe immediatamente la connessione quando un host precedentemente registrato in known_host improvvisamente inizia a inviarci una chiave host diversa.

In alcuni casi marginali, come alcune distribuzioni EC2, è possibile che si desideri che ignori questo potenziale problema. Il nostro strato SSH, al momento della stesura, non ci dà il controllo su questo comportamento esatto, ma possiamo aggirare lo semplicemente saltando il caricamento di known_hosts - se l'elenco degli host viene confrontato con è vuoto, quindi non c'è problema. Impostare env.disable_known_hosts su True quando si desidera questo comportamento; è Falso per impostazione predefinita, al fine di preservare il comportamento SSH predefinito.

Avviso L'attivazione di env.disable_known_hosts ti lascerà completamente aperto agli attacchi man-in-the-middle ! Si prega di usare con cautela.

+0

Eccellente, grazie mille! –