porta microsoft management acceso azure openssl fabric paramiko openssh

microsoft - porta azure



La tela sigue pidiendo contraseƱa usando la conexiĆ³n SSH (2)

Finalmente, encontré que el problema se debe a la generación de pares de claves públicas y privadas.

Seguí los pasos provistos en la guía azul de Windows , allí las claves se generan usando openssl, por lo que el proceso genera una clave pública almacenada en un archivo pem que debe cargar a su instancia durante el proceso de creación.

El problema es que esta clave privada obtenida no es reconocida correctamente por paramiko, por lo que el tejido no funcionará. Si intentas abrir una conexión ssh usando el paramiko del intérprete de 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)

Me da el error:

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

Cuando el archivo de clave no está encriptado.

Para resolver esto, creé el par de claves usando openssh y luego convertí la clave pública en pem para subirla a azul:

# 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]

Esto resolvió el problema.

Estoy tratando de conectarme a una instancia de Windows Azure usando Fabric, pero a pesar de que configuro la conexión ssh para ejecutar comandos, Fabric sigue pidiendo la contraseña.

Este es mi archivo de tela:

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

Lo ejecuto como:

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

Pero nada funcionó, sigue pidiendo la contraseña del usuario a pesar de que la ingresé correctamente.

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

Si trato de conectarme directamente con ssh, funciona perfectamente.

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

He intentado con los consejos dados en otras preguntas ( q1 q2 q3 ) pero nada funciona.

¿Alguna idea de lo que estoy haciendo mal?

Gracias


Para depurar las conexiones ssh de fabric, agregue estas líneas a su fabfile:

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

Esto imprimirá todos los mensajes de depuración de paramiko. Paramiko es la biblioteca ssh que usa la tela.

Tenga en cuenta que, desde Fabric 1.4 , debe habilitar específicamente el uso de ssh config:

env.use_ssh_config = True

(Nota: estoy bastante seguro de que mi fabfile solía funcionar con Fabric> 1.5 sin esta opción, pero ahora no lo actualizo a 1.10).