我尝试使用paramiko通过sftp将文件上传到服务器。
def send_file(server_, port_, user_, passwd_, file_, dir_):
"""
:return:
"""
try:
transport = paramiko.Transport((server_, int(port_)))
transport.connect(username=user_, password=passwd_)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(file_, dir_)
sftp.close()
except RuntimeError, err:
print(str(err))
如果我执行此函数,它只会挂起(无响应,没有错误消息),直到套接字超时。
凭据是正确的,我尝试使用来自同一台机器和同一网络的sftp和ssh客户端。 我也通过了传输并直接连接值,没有变化。 使用此功能时,server_上的日志不显示任何连接。 主机密钥位于我的known_hosts文件中。
try-block中的第一个语句成功(我将一个字符串而不是int传递给port_,这会引发异常),第二行似乎有问题。
这里有什么问题?
提前致谢!
更新1:
我在ipython2中试过这个并且它有效。上面的函数在PyQt程序中,并通过
执行self.connect(self.b_upload, QtCore.SIGNAL("clicked()"), self.onUpload)
功能onUpload:
def onUpload(self):
file_, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 'Datei inklusive Pfad angeben: ')
server_, port_, user_, passwd_, dir_ = ftpmod.read_config()
ftpmod.send_file(server_, port_, user_, passwd_, file_, dir_)
答案 0 :(得分:0)
您可以使用ssh.open_sftp
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
ssh.connect(host, username, password)
ftp = ssh.open_sftp()
ftp.put(localpath, remotepath)
ftp.close()