如何解决Paramiko SFTPClient 套接字从函数返回后关闭
我正在尝试通过 Paramiko 建立 SFTP 连接。此代码返回远程目录的内容:
#!/usr/bin/python2.7
import socket
import socks
import paramiko
sftp = {
"proxy_host": "172.16.40.22","proxy_port": 3128,"host": "172.16.40.21","port": 22,"user": "user","pass": "password",}
proxy = paramiko.ProxyCommand("nc --proxy %s %s %d" % (sftp["proxy_host"],sftp["host"],sftp["port"]))
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(sock=proxy,hostname=sftp["host"],port=sftp["port"],username=sftp["user"],password=sftp["pass"])
sftp = paramiko.SFTPClient.from_transport(client.get_transport())
print(sftp.listdir())
如果我将连接建立包装到函数中,我会收到一个 Socket is closed
错误:
#!/usr/bin/python2.7
import socket
import socks
import paramiko
sftp = {
"proxy_host": "172.16.40.22",}
def connect_sftp():
proxy = paramiko.ProxyCommand("nc --proxy %s %s %d" % (sftp["proxy_host"],sftp["port"]))
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(sock=proxy,password=sftp["pass"])
return paramiko.SFTPClient.from_transport(client.get_transport())
sftp = connect_sftp()
print(sftp.listdir())
错误:
Traceback (most recent call last):
File "./sftp.py",line 26,in <module>
print(sftp.listdir())
File "/usr/lib/python2.7/site-packages/paramiko/sftp_client.py",line 172,in listdir
return [f.filename for f in self.listdir_attr(path)]
File "/usr/lib/python2.7/site-packages/paramiko/sftp_client.py",line 193,in listdir_attr
t,msg = self._request(CMD_OPENDIR,path)
File "/usr/lib/python2.7/site-packages/paramiko/sftp_client.py",line 729,in _request
num = self._async_request(type(None),t,*arg)
File "/usr/lib/python2.7/site-packages/paramiko/sftp_client.py",line 754,in _async_request
self._send_packet(t,msg)
File "/usr/lib/python2.7/site-packages/paramiko/sftp.py",line 170,in _send_packet
self._write_all(out)
File "/usr/lib/python2.7/site-packages/paramiko/sftp.py",line 133,in _write_all
n = self.sock.send(out)
File "/usr/lib/python2.7/site-packages/paramiko/channel.py",line 767,in send
return self._send(s,m)
File "/usr/lib/python2.7/site-packages/paramiko/channel.py",line 1133,in _send
raise socket.error('Socket is closed')
socket.error: Socket is closed
同时这段代码可以在另一台使用相同 Python 版本的 Linux 机器上正常运行。
请帮忙查找问题原因。提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。