2017-09-15 1 views
0

Ich habe viele ähnliche Fragen hier in SO gefunden, aber jede von ihnen hat mir geholfen, auch dieses Problem scheint einfach zu sein.Ich kann SSH mit Paramiko nicht mit einer Google Compute Engine-Instanz verbinden

Ich versuche, eine Verbindung mit einer remote Google Compute Engine-Instanz über SSH (ich möchte SFTP verwenden) mit Paramiko. Unten ist mein Code:

 client = paramiko.SSHClient() 
     client.load_system_host_keys() 
     client.connect('External_IP_Get_In_GCE_panel', username='myuser') 
     stdin, stdout, stderr = client.exec_command('ls') 
     for line in stdout: 
      print('... ' + line.strip('\n')) 
     client.close() 

Mit diesem Code habe ich den Fehler

PasswordRequiredException: Private Schlüsseldatei

verschlüsselt ist

Als ich client.connect('External_IP_Get_In_GCE_panel', username='myuser', password='') versucht der Fehler ist:

BadAuthenticationType: ('Ungültiger Authentifizierungstyp', [u'publickey ']) (allowed_types = [u'publickey '])

Mein SSH-Schlüssel für den Zugriff auf die Google Compute-Engine hat kein Kennwort. Ich kann die gcloud compute ssh instance-name verwenden und auch auf SFTP durch Filezilla ohne Probleme zugreifen.

Wie gesagt, ich habe viele Alternativen hier in SO ausprobiert, aber alle haben mir geholfen. Im Folgenden sind drei andere Versionen des Codes:

Mit der Taste

key = paramiko.RSAKey(data=base64.b64decode(b"""AAAAB3Nza...""")) 
    client = paramiko.SSHClient() 
    client.get_host_keys().add('External_IP_Get_In_GCE_panel', 'ssh-rsa', key) 
    client.connect('External_IP_Get_In_GCE_panel', username='myuser', password='') 
    # I got the key using ssh-keyscan `External_IP_Get_In_GCE_panel`in my local machine 

anderen lib Mit

key = paramiko.RSAKey(data=decodebytes(keydata)) 
    cnopts = pysftp.CnOpts() 
    cnopts.hostkeys.add('External_IP_Get_In_GCE_panel', 'ssh-rsa', key) 

    with pysftp.Connection('External_IP_Get_In_GCE_panel', username='myuser', cnopts=cnopts) as sftp: 
     with sftp.cd('../directory'): 
      sftp.get('remote_file')''' 

Mit dem SSH-Schlüssel-Datei

self.client = paramiko.SSHClient() 
    self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    self.client.connect(hostname="External_IP_Get_In_GCE_panel", username="myuser", key_filename=os.path.expanduser('~/.ssh/ssh_key_file'), password='') # also tried ssh_key_file.pub 

In allen diese Versionen (und einige andere) Ich habe versucht, password='', password=None zu verwenden und kein Kennwortargument zu senden. Die Ergebnisse sind immer die gleichen Erros oben.

Irgendein Tipp über was ich falsch mache?

Antwort

1

Der Schlüssel verschlüsselt ist, benötigen Sie ein Passwort (und vermutlich nicht leer, so) zu decrypt the private key, dh

key = paramiko.RSAKey(data=base64.b64decode(b"""AAAAB3Nza..."""), password='my key password') 

Der Server dort erlaubt nur die Authentifizierung öffentlicher Schlüssel, so password-client.connect geben nicht Sinn machen.

+0

Wie gesagt, der SSH-Schlüssel wurde ohne Passwort erstellt, also habe ich nichts, um diesen Parameter zu füllen, und 'password = ''' mit leerer Zeichenfolge löst den gleichen Fehler wie der verschlüsselte private Schlüssel aus. – James

+1

@James scheint es ein Passwort zu haben - vielleicht verwechseln Sie "kein Passwort" mit "sshagent merkt sich das Passwort" –

+0

@James oder versuchen Sie ein leeres Passwort im Aufruf von 'RSAKey'. –

Verwandte Themen