2010-02-26 15 views
33

Ogni volta che viene eseguito fabric, richiede la password di root, può essere inviata insieme per le proposte automatiche.password tessuto

fab staging test 
+0

vorrei prendere in considerazione con molta attenzione prima di adottare qualsiasi ** ** strategia che ha coinvolto la memorizzazione di password in chiaro - come l'ambiente Vars, salvato in script, anche inseriti nella linea di comando - tanto quanto odio contraddire un luminare come AM (davvero, amico, mi hai dato un ** lotto ** di informazioni nel corso degli anni) - vive nella tua cronologia dei comandi e presenta un rischio per la sicurezza. – gomad

risposta

47

fab -h vi mostrerà tutte le opzioni, si può anche leggere here.

In particolare, cito,

CODICE -p, --password = CODICE

Imposta env.password alla stringa data; verrà quindi utilizzato come password predefinita quando si effettuano connessioni SSH o si chiama il programma sudo.

52

So che hai chiesto informazioni sulla password ma non sarebbe meglio configurare il sistema in modo che tu possa fare fabric (cioè SSH) senza password?

Per questo, sulla macchina locale fare:

  1. ssh-keygen e sono d'accordo con tutte le impostazioni predefinite (se non si hanno motivi fare altrimenti)
  2. cat ~/.ssh/id_rsa.pub e copiare la chiave

Sulla macchina remota :

  1. mkdir ~/.ssh && chmod 700 ~/.ssh
  2. touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
  3. Incolla chiave copiato in authorized_keys2

Da adesso la tua macchina remota “trust” la vostra macchina locale e permette la registrazione in senza password. Maneggevole.

+2

Ho dovuto eseguire 'chmod 700 ~/.ssh' per farlo funzionare –

+6

usare ssh-copy-id potrebbe essere più veloce: ' 'ssh-copy-id'' Uso:/usr/bin/ssh-copy -id [-i [identity_file]] [utente @] macchina – HVNSweeting

+0

+1 per ssh-copy-id. Neat! – dennis

6

Un modo per fare questo senza mettere la password nella lista dei processi (comandi visualizzati in ps aux) è quello di metterlo in fabfile.py in questo modo:

from fabric.context_managers import env 
env.password = 'PASSWORD' 

Metti che prima di tutto che va al sistema remoto e non chiederà più una password.

+0

Solo una nota, questo genera un errore nell'ultimo Fabric 1.5.3 e Paramiko 1.9.0. –

+0

Basta rimuovere 'da fabric import env' – Crazenezz

+1

Nuovo pacchetto è context_managers,' da fabric.context_managers import env' –

47

È inoltre possibile impostare le password su base host. Non era ovvio per me, così qui va per chi cerca questo:

from fabric import env 
env.hosts = ['[email protected]:port1', '[email protected]'] 
env.passwords = {'[email protected]:port1': 'password1', '[email protected]': 'password2'} 

cache tessuto utilizzato le password nel dizionario env.passwords. Imposta questa cache utilizzando la stringa host completa come chiave del dizionario e la password come valore. Se si imposta questo dizionario autonomamente prima di eseguire qualsiasi attività, Fabric non li richiederà affatto.

+0

enorme grazie per questa risposta – qre0ct

8

Giusto per aggiungere per chiunque si trovi qui da una ricerca, è possibile specificare l'opzione -I quando si esegue fab per richiedere una password predefinita da utilizzare.In questo modo non sarà visibile nella cronologia dei comandi

esempio:

$ fab -I my_task 
Initial value for env.password: