Paramiko 无法连接

2 投票
1 回答
3262 浏览
提问于 2025-04-21 06:05

我试着用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()

撰写回答