2013-03-29 25 views
8

Sto provando a connettermi a un'istanza di Windows Azure usando fabric, ma nonostante configuri ssh conection per eseguire i comandi, fabric continua a chiedere la password.continua a chiedere la password usando la connessione SSH

Questo è il mio file di tessuto:

def azure1(): 
    env.hosts = ['host.cloudapp.net:60770'] 
    env.user = 'adminuser' 
    env.key_filename = './azure.key' 

def what_is_my_name(): 
    run('whoami') 

corro come:

fab -f fabfile.py azure1 what_is_my_name 

o

fab -k -f fabfile.py -i azure.key -H [email protected]:60770 -p password what_is_my_name 

Ma niente ha funzionato, si continua a chiedere per la password utente, nonostante io entro correttamente.

Executing task 'what_is_my_name' 
run: whoami 
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 

Se provo a collegarmi direttamente con ssh, funziona perfettamente.

ssh -i azure.key -p 60770 [email protected] 

Ho provato i consigli dato in altre domande (q1q2q3), ma non funziona niente.

Qualche idea su cosa sto facendo male?

Grazie

risposta

6

Finalmente ho trovato il problema è dovuto alla generazione della coppia di chiavi pubblica-privata.

Ho seguito i passaggi forniti in windows azure guide, in cui le chiavi vengono generate utilizzando openssl, quindi il processo produce una chiave pubblica memorizzata in un file PEM che è necessario caricare nell'istanza durante il processo di creazione.

Il problema è che questa chiave privata ottenuta non è correttamente riconosciuta da paramiko, quindi la stoffa non funzionerà. Se si tenta di aprire una connessione SSH utilizzando paramiko da interprete Python:

>>> import paramiko, os 
>>> paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 
>>> ssh = paramiko.SSHClient() 
>>> ssh.load_host_keys('private_key_file.key') # private key file generated using openssl 
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
>>> ssh.connect("web1.cloudapp.net",port=56317) 

mi dà l'errore:

DEBUG:paramiko.transport:Trying SSH agent key a9d8dd41609191ebeedbe8df768ad8c9 
DEBUG:paramiko.transport:userauth is OK 
INFO:paramiko.transport:Authentication (publickey) failed. 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File ".. /paramiko/client.py", line 337, in connect 
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys) 
    File ".. /paramiko/client.py", line 528, in _auth 
    raise saved_exception 
paramiko.PasswordRequiredException: Private key file is encrypted 

Quando il file chiave non è crittografato.

Per risolvere questo problema, ho creato la coppia di chiavi utilizzando OpenSSH e poi convertire la chiave pubblica alla PEM per caricarlo su Azure:

# Create key with openssh 
ssh-keygen -t rsa -b 2048 -f private_key_file.key 

# extract public key and store as x.509 pem format 
openssl req -x509 -days 365 -new -key private_key_file.key -out public_key_file.pem 

# upload public_key_file.pem file during instance creation 

# check connection to instance 
ssh -i private_key_file.key -p 63534 [email protected] 

Questo ha risolto il problema.

4

Per le connessioni ssh del tessuto di debug, aggiungere queste righe al vostro fabfile:

import paramiko, os 
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 

Questo stamperà tutti i messaggi di debug di paramiko. Paramiko è la libreria ssh utilizzata da fabric.

Nota che since Fabric 1.4 devi abilitare nello specifico usando ssh config:

env.use_ssh_config = True 

(Nota: Sono abbastanza sicuro assolutamente certo che il mio fabfile utilizzato per lavorare con tessuto> 1.5 senza questa opzione, ma non ora che ho aggiornato a 1,10).