标签: pysftp

pysftp和paramiko在几秒钟后停止上传文件

我正在使用python 3.4和pysftp,(pysftp怀疑是在3.4上工作)

Pysftp是paramiko的包装.

我下载文件没问题.

我也可以上传小文件.

当我上传需要超过几秒钟的文件时,我会收到错误.我监控了我的互联网连接,大约3秒钟后就没有上传了.

约5分钟后,我收到了EOFError

我还尝试了paramiko模块,结果相同.

我可以使用open ssh以及filezilla上传文件而不会出现问题.

with pysftp.Connection(host="host",username="python",
    password="pass",port=2222) as srv:
    print('server connected')

    srv.put(file_name)
Run Code Online (Sandbox Code Playgroud)

我希望能够上传大于几kb的文件......我缺少什么?

python sftp paramiko pysftp

2
推荐指数
1
解决办法
1725
查看次数

使用Python的pysftp,如何验证主机密钥?

我正在使用Python 2.7 pysftp程序包连接到SFTP服务器。

import pysftp

DOWNLOAD = {
"USERNAME": "username",
"PASSWORD": "password"
}

FTP_SITE = 'sftp.mysite.com'

srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'], 
                    password=DOWNLOAD['PASSWORD']
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我得到了错误日志:

import pysftp

DOWNLOAD = {
"USERNAME": "username",
"PASSWORD": "password"
}

FTP_SITE = 'sftp.mysite.com'

srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'], 
                    password=DOWNLOAD['PASSWORD']
Run Code Online (Sandbox Code Playgroud)

我目前正在通过执行以下操作来关闭对主机密钥的检查:

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None 
srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'], 
                         password=DOWNLOAD['PASSWORD'], cnopts=cnopts)
Run Code Online (Sandbox Code Playgroud)

我想保留主机密钥的安全性功能。谁能提供有关如何生成主机密钥的链接,或者在此处提供一小段代码示例?我没找到太多。

python ssh sftp pysftp

2
推荐指数
1
解决办法
4006
查看次数

尽管文件已上传,但 Python pysftp.put 会引发“没有此类文件”异常

我正在使用 pysftp 连接到服务器并向其上传文件。

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
self.sftp = pysftp.Connection(host=self.serverConnectionAuth['host'], port=self.serverConnectionAuth['port'],
                              username=self.serverConnectionAuth['username'], password=self.serverConnectionAuth['password'], 
                              cnopts=cnopts)
self.sftp.put(localpath=self.filepath+filename, remotepath=filename)
Run Code Online (Sandbox Code Playgroud)

有时它没有错误,但有时它会正确放置文件,但会引发以下异常。该文件由服务器上运行的另一个程序读取和处理,因此我可以看到该文件在那里并且没有损坏

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
self.sftp = pysftp.Connection(host=self.serverConnectionAuth['host'], port=self.serverConnectionAuth['port'],
                              username=self.serverConnectionAuth['username'], password=self.serverConnectionAuth['password'], 
                              cnopts=cnopts)
self.sftp.put(localpath=self.filepath+filename, remotepath=filename)
Run Code Online (Sandbox Code Playgroud)

我怎样才能防止异常?

python sftp pysftp

2
推荐指数
1
解决办法
3141
查看次数

由于客户端超出服务器的内部缓冲区,pysftp 下载失败

我只需要从 python 脚本下载一个文件,所以代码很简单:

import pysftp
sftp = pysftp.Connection('test_host','test',password='test')
sftp.get('testfile', 'c:\\tmp\\testfile3')
Run Code Online (Sandbox Code Playgroud)

下载将开始并以正常速度进行几秒钟,然后停止。不再下载任何内容,几分钟后服务器将关闭连接。我正在连接的服务器的管理员出于“安全原因”不会透露服务器的任何详细信息,但他写信给我说,他可以看到如下错误:

SFTP 发送错误,并发客户端请求过多。客户端已超出服务器的内部缓冲区。

我可以从 python 代码中做些什么吗?

python pysftp

1
推荐指数
1
解决办法
2654
查看次数

在单元测试中模拟 python 类并验证实例

我正在尝试对一个 SFTP 帮助程序类进行单元测试,该类对 pysftp 模块进行一些调用。我想模拟来自 pysftp 的实际网络调用,因此没有副作用,只需确保该类使用正确的参数正确调用底层 SFTP 方法。

到目前为止,这是我的代码的一个简单示例:

import pysftp
import unittest
import mock

class SFTPHelper(object):
    def __init__(self, host, username, password, files_dir):
        self.host = host
        self.username = username
        self.password = password
        self.files_dir = files_dir

    def list_files(self):
        with pysftp.Connection(
                self.host,
                username=self.username,
                password=self.password) as sftp:
            return sftp.listdir(self.files_dir)

class TestSFTPHelper(unittest.TestCase):
    @mock.patch('pysftp.Connection')
    def test_list_files(self, mock_connection):
        sftp_helper = SFTPHelper('somehost', 'someuser', 'somepassword', '/some/files/dir')
        sftp_helper.list_files()

        # this assertion passes
        mock_connection.assert_called_with(
            'somehost', password='somepassword', username='someuser')

        # this assertion does not pass
        mock_connection.listdir.assert_called_with('/some/files/dir')
Run Code Online (Sandbox Code Playgroud)

断言错误:

AssertionError: Expected call: listdir('/some/files/dir') …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking pysftp

1
推荐指数
1
解决办法
1623
查看次数

是否可以使用 pysftp 模块删除包含某些内容的目录?

我正在使用 pysftp 模块创建备份脚本。我可以上传和下载文件。当我尝试删除包含某些内容的目录时,出现异常。

这是我试过的

con = pysftp.Connection('192.168.0.40',username='root',password='clado123')
con.chdir('/root/backup')
con.pwd
con.listdir()
['data', 'test']
data - directory is not empty.
test - directory is empty.
con.rmdir('test')
con.listdir()
['data']
con.rmdir('data')
Run Code Online (Sandbox Code Playgroud)

OSError:失败

任何人都可以建议我解决这个问题的方法吗?

python sftp python-2.7 python-3.x pysftp

1
推荐指数
1
解决办法
3792
查看次数

使用python pysftp包,从服务器获取"SSHException:错误的主机密钥"错误

我正在使用pysftp软件包运行Python 3,版本0.2.9.

我有以下代码.我正在正确加载主机密钥,如线所示cnopts.hostkeys.keys().

import pysftp

key_file_test = './path_to_key_file/key_file.pub'

DOWNLOAD_UAT = {
    "USERNAME": "xxxxxxxx",
    "PASSWORD": "xxxxxxxx"
}

UAT_FTP_SITE = 'sftp-test.site.com'

cnopts = pysftp.CnOpts()
cnopts.hostkeys.load(key_file_test)
cnopts.hostkeys.keys()

'''['github.com', 'XXX.XX.XXX.XXX', 'sftp-test.site.com']'''

srv = pysftp.Connection(host=UAT_SFTP_SITE, username=DOWNLOAD_UAT['USERNAME'], 
                        password=DOWNLOAD_UAT['PASSWORD'], cnopts=cnopts, port=22)
Run Code Online (Sandbox Code Playgroud)

然后我运行最后一行时的错误是

---------------------------------------------------------------------------
SSHException                              Traceback (most recent call last)
<ipython-input-82-308ec955a92e> in <module>()
      8 
      9 srv = pysftp.Connection(host=UAT_SFTP_SITE, username=DOWNLOAD_UAT['USERNAME'], 
---> 10                         password=DOWNLOAD_UAT['PASSWORD'], cnopts=cnopts, port=22)
     11 data = srv.listdir()

C:\ProgramData\Anaconda3\lib\site-packages\pysftp\__init__.py in __init__(self, host, username, private_key, password, port, private_key_pass, ciphers, log, cnopts, default_path)
    141         self._transport.use_compression(self._cnopts.compression)
    142         self._set_authentication(password, private_key, …
Run Code Online (Sandbox Code Playgroud)

python sftp pysftp

1
推荐指数
1
解决办法
2558
查看次数

如何使用pysftp检查SFTP中是否存在文件?

我在 etl 工作(第一次),我需要从客户端的 SFTP 中提取一些文件。我的问题是,文件数量是可变的,所以我需要检查,如果文件中存在,并得到它,该文件格式,如“_文件YYYY-MM-DD -number- ñ ”,其中YYYY-MM-DD是当前的日期和n是文件的编号,因此如果有 7 个文件,我必须查找:

  • file_2019-08-25-number-1
  • file_2019-08-25-number-2

直到现在我发现我可以做这样的事情

cnopts = pysftp.CnOpts()
with pysftp.Connection(host=host, port=port, username=username, password=password, cnopts=cnopts) as sftp:
    files = sftp.listdir(directory)
Run Code Online (Sandbox Code Playgroud)

我如何在那里的文件中找到?

python sftp pysftp

1
推荐指数
1
解决办法
4492
查看次数

Python pysftp put_r 在 Windows 上不起作用

我想使用 pysftp 0.2.8 将多个文件从 Windows 目录上传到 SFTP 服务器。我已经阅读了文档,它建议使用put_dorput_r但两者都给我以下错误:

OSError:无效路径:

sftp_local_path = r'C:\Users\Swiss\some\path'

sftp_remote_path = '/FTP/LPS Data/ATC/RAND/20191019_RAND/XML'

with pysftp.Connection("xxx.xxx.xxx.xxx", username=myUsername, password=myPassword) as sftp:
    with sftp.cd(sftp_remote_path):
        sftp.put_r(sftp_local_path, sftp_remote_path)
        for i in sftp.listdir():
            lstatout=str(sftp.lstat(i)).split()[0]
            if 'd' in lstatout: print (i, 'is a directory')

sftp.close()
Run Code Online (Sandbox Code Playgroud)

我希望能够将本地目录中的所有文件或选定文件复制到 SFTP 服务器。

python upload sftp pysftp

1
推荐指数
1
解决办法
1433
查看次数

标签 统计

pysftp ×9

python ×9

sftp ×7

mocking ×1

paramiko ×1

python-2.7 ×1

python-3.x ×1

ssh ×1

unit-testing ×1

upload ×1