Paramiko 无法连接
我试着用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客户端测试过。 我也直接传递了Transport和连接的值,但没有任何变化。 服务器的日志显示,当我使用这个函数时,没有任何连接记录。 主机密钥已经在我的known_hosts文件里了。
在try块中的第一条语句执行成功(我把一个字符串传给了端口,结果抛出了异常),但第二行似乎有问题。
这到底是什么问题呢?
提前谢谢你们!
更新 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_)
1 个回答
0
你可以通过sftp发送文件,使用 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()