【问题标题】:Paramiko close connection doesn't workParamiko 关闭连接不起作用
【发布时间】:2018-11-29 20:09:59
【问题描述】:

我在尝试关闭 Paramiko SFTP 连接时遇到问题。即使我调用 close 连接仍然挂起,我通过运行 netstat (Windows) 进行检查:

netstat -an | find ":22"

和python代码:

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

关闭有效的 Paramiko SFTP 连接的正确方法是什么?

谢谢

【问题讨论】:

    标签: python ssh sftp paramiko


    【解决方案1】:

    SSHClient.open_sftp 在 SSH 连接中打开一个虚拟 SFTP 通道。您可以在单个 SSH 连接中拥有多个通道。因此关闭单个通道不会关闭整个 SSH 连接。

    您需要调用 SSHClient.close 来关闭物理 SSH 连接(它会关闭所有通道,如果有的话仍然打开)。

    ssh.close()
    

    强制警告:不要使用MissingHostKeyPolicy 盲目接受所有主机密钥。那是一个安全漏洞。您将失去对MITM attacks 的保护。

    有关正确(且安全)的方法,请参阅:Paramiko "Unknown Server"

    【讨论】:

      【解决方案2】:

      这是正确的方法

      import paramiko
      
      ssh = paramiko.SSHClient()
      ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      ssh.connect()
      
      ftp = ssh.open_sftp()
      
      ftp.close()
      ssh.close()
      

      您需要关闭 ssh 实例以及 sftp。

      【讨论】: