2013-03-29 25 views
8

Próbuję połączyć się z instancją Windows Azure za pomocą tkaniny, ale mimo tego, że skonfigurowałem połączenie ssh do wykonywania poleceń, tkanina wciąż prosi o podanie hasła.Tkanina wciąż prosi o podanie hasła przy użyciu połączenia SSH

To jest mój plik tkanina:

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

def what_is_my_name(): 
    run('whoami') 

go uruchomić jak:

fab -f fabfile.py azure1 what_is_my_name 

lub

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

ale nic nie działało, to ciągle pyta o hasło użytkownika mimo wejdę to poprawnie.

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

Jeśli spróbuję połączyć się bezpośrednio z ssh, działa idealnie.

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

Wcześniej próbowałem radzi podane w innych pytań (q1q2q3), ale nic nie działa.

Każdy pomysł, co robię źle?

Dziękuję

Odpowiedz

6

Wreszcie znalazłem problem jest z powodu generowania pary kluczy publiczny-prywatny.

Postępowałem zgodnie z instrukcjami podanymi w windows azure guide, tam klucze są generowane za pomocą openssl, więc proces uzyskuje klucz publiczny przechowywany w pliku pem, który musisz przesłać do instancji podczas procesu tworzenia.

Problem polega na tym, że uzyskany klucz prywatny nie został poprawnie rozpoznany przez paramiko, więc tkanina nie będzie działać. Jeśli spróbujesz otworzyć połączenie ssh przy użyciu paramiko z interpretera Pythona:

>>> 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) 

daje mi błąd:

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 

Gdy plik klucza nie jest szyfrowana.

Aby rozwiązać ten problem, stworzyłem parę kluczy za pomocą OpenSSH, a następnie przekonwertować klucza publicznego do PEM przesłać go do 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] 

To rozwiązało problem.

4

Do połączeń ssh Debug tkaniny, dodaj te linie do fabfile:

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

ten wypisze wszystkie komunikaty debugowania paramiko użytkownika. Paramiko jest biblioteką ssh, z której korzysta tkanina.

Zauważ, że since Fabric 1.4 trzeba specjalnie włączyć ssh config:

env.use_ssh_config = True 

(Uwaga: Jestem całkiem pewny absolutnie pewien, że moja fabfile wykorzystywane do pracy z tkaniny> 1.5 bez tej opcji, ale teraz nie zaktualizowałem do wersji 1.10).

Powiązane problemy