2017-09-15 12 views
0

많은 질문이 있지만 여기에서 많은 도움을 얻었습니다.하지만이 문제는 간단합니다.paramiko와 SSH를 Google Compute Engine 인스턴스에 연결할 수 없습니다.

저는 paramiko를 사용하여 SSH (SFTP를 사용하고 싶습니다)를 통해 원격 Google Compute Engine 인스턴스에 연결하려고합니다. 다음은 내 코드 :이 코드

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

, 나는 오류를

PasswordRequiredException 있습니다

: 나는 오류가 client.connect('External_IP_Get_In_GCE_panel', username='myuser', password='')을 시도했을 때 개인 키 파일이

를 암호화

BadAuthenticationType : ('잘못된 인증 유형', [u'publickey ']) (allowed_types = [u'publickey '])

Google Compute Engine에 액세스하기위한 내 SSH 키는 비밀번호가 없습니다. 나는 gcloud compute ssh instance-name을 사용할 수 있으며 문제없이 SFTP를 통해 Filezilla에 액세스 할 수 있습니다.

내가 말했듯이, 나는 여기에서 발견 된 많은 대안을 시도했지만 그들 중 누구도 나를 도왔다. 모두에서 SSH를 사용하여 키 파일

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 

을 다른 lib 디렉토리

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

를 사용하여 키

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 

를 사용

: 아래 3 다른 코드의 버전은 이 버전 (및 일부 다른) password='', password=None을 사용하려고 시도했지만 암호 인수를 보내지 않았습니다. 결과는 항상 위의 동일한 오류입니다.

내가 잘못하고있는 것에 대한 팁이 있습니까?

답변

1

키가 암호화, 당신은 암호가 필요 (그래서 아마도 비어) 즉, decrypt the private key

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

서버가 단지 그렇게 client.connect-password하지 않는 제공, 공개 키 인증을 허용 어떤 의미가 있습니다.

+0

내가 말했듯이 SSH 키는 암호없이 만들어 졌으므로이 매개 변수를 채울 항목이 없으며 빈 문자열을 사용하는'password = '''는 암호화 된 개인 키와 동일한 오류를 발생시킵니다. – James

+1

@James 암호가있는 것 같습니다. "sshagent는 암호를 기억하고 있습니다." –

+0

@James 또는 'RSAKey'호출시 빈 암호를 사용해보십시오. –