简体   繁体   English

Paramiko紧密连接不起作用

[英]Paramiko close connection doesn't work

I'm having trouble trying to close a Paramiko SFTP connection. 我在尝试关闭Paramiko SFTP连接时遇到问题。 Even though I call close the connection is still hanging, I check by running netstat (Windows): 即使我呼叫关闭连接仍然挂起,我还是通过运行netstat(Windows)进行检查:

netstat -an | find ":22"

and the python code: 和python代码:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy() )
ftp = ssh.open_sftp()
time.sleep(5)
ftp.close()

What is the proper way to close Paramiko SFTP connection that works? 关闭有效的Paramiko SFTP连接的正确方法是什么?

thanks 谢谢

SSHClient.open_sftp opens a virtual SFTP channel within a SSH connection. SSHClient.open_sftp在SSH连接中打开一个虚拟SFTP通道。 You can have multiple channels in a single SSH connection. 一个SSH连接中可以有多个通道。 Hence closing a single channel, won't close whole SSH connection. 因此,关闭一个通道不会关闭整个SSH连接。

You need to call SSHClient.close to close the physical SSH connection (it takes all channels down with it, if any are still open). 您需要调用SSHClient.close来关闭物理SSH连接(如果所有通道仍然打开,它将关闭所有通道)。

ssh.close()

Obligatory warning: Do not use MissingHostKeyPolicy to blindly accept all host keys. 强制性警告:请勿使用MissingHostKeyPolicy盲目接受所有主机密钥。 That is a security flaw. 那是一个安全漏洞。 You lose a protection against MITM attacks . 您将无法防御MITM攻击

For a correct (and secure) approach, see: Paramiko "Unknown Server" . 有关正确(安全)的方法,请参阅: Paramiko“未知服务器”

This is the correct way to go about it 这是正确的解决方法

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect()

ftp = ssh.open_sftp()

ftp.close()
ssh.close()

You need to close the ssh instance as well as the sftp. 您需要关闭ssh实例以及sftp。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM