2016-02-26 25 views
1

如何指定一個不同的密碼在paramiko ssh/sftp連接上使用? (類似於scp/ssh的-c命令行)。與paramiko使用不同的密碼

我曾嘗試下面的代碼:

self.sshclient = paramiko.SSHClient() 
    self.sshclient.load_system_host_keys() 
    self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    self.sshclient.connect(hostname, **ssh_kwargs) 

    self.transport = self.sshclient.get_transport() 
    self.transport.get_security_options().ciphers = ('arcfour128',) 
    self.transport.set_keepalive(keepalive) 

    self.channel = self.transport.open_session()                          
    self.channel.settimeout(timeout) 

但在調試,我可以看到:

2016/02/26 15:27:47 DEBUG Ciphers agreed: local=aes128-ctr, remote=aes128-ctr 
2016/02/26 15:27:47 DEBUG using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none 

我看過的地方,連接應get_security_options()以後的事情了,倒引起了我self.transportNoneType(似乎運輸與連接有關)。

回答

1

與SSHClient的問題是,在會話期間connect()開始,根據Transport docs

更改內容和/或這些字段的順序會影響底層傳輸(但前提是你之前改變它們開始會話)。

你可以做的是覆蓋Transport的首選密碼:

paramiko.Transport._preferred_ciphers = ('arcfour128',) 
self.sshclient = paramiko.SSHClient() 
self.sshclient.load_system_host_keys() 
self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
self.sshclient.connect(hostname, **ssh_kwargs) 
... 

如果你想要的只是一個SFTP連接,你可以創建一個第一Transport,並創建從運輸SFTPClient對象:

self.transport = paramiko.Transport((hostname, 22)) 
self.transport.get_security_options().ciphers = ('arcfour128',) 
self.transport.connect(username=user, password=pass) # or pkeys, ... 
self.transport.set_keepalive(keepalive) 
self.sftp = paramiko.SFTPClient.from_transport(self.transport) 
self.sftp.put('local_file', 'remote_path') 
self.sftp.close() 
相關問題