标签: pysftp

从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”

我正在编写一个简单的脚本来连接我的 sftp 服务器,aws-lambda我得到了

Unable to import module 'lambda_function': No module named '_cffi_backend'
Run Code Online (Sandbox Code Playgroud)

当我pysftp从导入时aws-lambda。我正在使用python3.6并且仅导入pysftp其他内容

我已经尝试安装 cffi

python3 pip install cffi
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services pysftp aws-lambda

7
推荐指数
2
解决办法
2万
查看次数

pysftp.Connection.walktree()参数的说明

我刚刚开始使用Python的pysftp,我很困惑如何调用它的walktree功能.

我发现了一些代码(在发现http://pydoc.net/Python/pysftp/0.2.8/pysftp/),帮助我更好地理解什么构成了我的参数应该采取

def walktree(self, remotepath, fcallback, dcallback, ucallback, recurse=True):
    '''recursively descend, depth first, the directory tree rooted at
    remotepath, calling discreet callback functions for each regular file,
    directory and unknown file type.

    :param str remotepath:
        root of remote directory to descend, use '.' to start at
        :attr:`.pwd`
    :param callable fcallback:
        callback function to invoke for a regular file.
        (form: ``func(str)``)
    :param callable dcallback:
        callback function to invoke for a directory. (form: ``func(str)``)
    :param callable ucallback:
        callback …
Run Code Online (Sandbox Code Playgroud)

python sftp callback pysftp

6
推荐指数
2
解决办法
2304
查看次数

使用 pysftp 连接到 SFTP 服务器时出现“无法加载主机密钥”警告

我编写了一个 Python 脚本来使用密钥身份验证连接到 SFTP 服务器。它成功连接到服务器,但显示以下警告(见下文)。它是什么意思以及如何删除它。代码中需要进行哪些更改?

我的代码:

import os
import pysftp
import socket
import paramiko
import time
import os.path
import shutil

IP = "127.0.X.X"
myUsername = "USERNAME"
port = 22

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

import os
privatekeyfile = os.path.expanduser("C:\\Users\\Rohan\\.ssh\\cool.prv")
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)

try:
    with pysftp.Connection(host=IP, username=myUsername,private_key=mykey,cnopts=cnopts) as sftp:
        try:
            r=str(socket.gethostbyaddr(IP))
            print("connection successful with "+r)

        except socket.herror:
            print("Unknown host")
except:
    print("connection failed")
Run Code Online (Sandbox Code Playgroud)

警告:

import os
import pysftp
import socket
import paramiko
import time
import os.path
import shutil

IP = "127.0.X.X" …
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko python-3.x pysftp

6
推荐指数
2
解决办法
3万
查看次数

Python将SFTP服务器上的文件移动到另一个文件夹

我编写了这个脚本来将文件从 SFTP 远程文件夹保存到本地文件夹。然后它从 SFTP 中删除该文件。我想更改它,以便它停止删除文件,而是将它们保存到 SFTP 上的备份文件夹中。我如何在 pysftp 中做到这一点?我找不到任何关于它的文档......

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

myHostname = "123"
myUsername = "456"
myPassword = "789"

with pysftp.Connection(host=myHostname, username=myUsername, password="789", cnopts=cnopts) as sftp:
    sftp.cwd("/Production/In/")
    directory_structure = sftp.listdir_attr()
    local_dir= "D:/"
    remote_dir = "/Production/"
    remote_backup_dir = "/Production/Backup/"

    for attr in directory_structure:
        if attr.filename.endswith(".xml"):
            file = attr.filename
            sftp.get(remote_dir + file, local_dir + file)
            print("Moved " + file + " to " + local_dir)
            sftp.remove(remote_dir + file)
Run Code Online (Sandbox Code Playgroud)

不要担心我没有主机密钥或密码。一旦我让脚本工作,我就不会保持这种状态:)

python sftp pysftp

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

将私钥作为字符串/文本传递,而不是在 Python PYSFTP 中传递文件路径

我想传递我的实际私钥值作为参数,而不是提供文件路径。

到目前为止我已经使用了以下代码:

import pysftp
import os

cnopts = pysftp.CnOpts()
if str(host_keys).lower() =='none':
    cnopts.hostkeys = None
else:
    cnopts.hostkeys.load(hostkeys)
filename = os.path.basename(localpath)
print(filename)
remotepath = os.path.join(remotefolder, filename)
print(remotepath)
with pysftp.Connection(host=hostname, port=int(port), username=username, password=password, cnopts=cnopts,private_key=private_key_filepath) as sftp:
    sftp.put(localpath, remotepath=remotepath)
Run Code Online (Sandbox Code Playgroud)

请建议某种方式将其作为文本传递。

例子:

private_key='abcdmyprivatekeytext'
Run Code Online (Sandbox Code Playgroud)

在实际场景中,我会将我的私钥文本放置在安全保管库中。

python ssh sftp pysftp private-key

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

如何使用pysftp仅同步远程目录中已更改的文件?

我正在使用 pysftp 库的get_r函数(https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get_r)从 sftp 服务器获取目录结构的本地副本。

对于远程目录的内容已更改并且我只想获取自上次运行脚本以来更改的文件的情况,这是正确的方法吗?

该脚本应该能够递归地同步远程目录并镜像远程目录的状态 - fe 使用参数控制是否应该删除本地过时的文件(远程服务器上不再存在的文件),以及对应该获取现有文件和新文件。

我目前的方法在这里。

用法示例:

from sftp_sync import sync_dir

sync_dir('/remote/path/', '/local/path/')
Run Code Online (Sandbox Code Playgroud)

python sftp synchronization data-synchronization pysftp

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

来自 Linux 的 Python pysftp get_r 在 Linux 上运行良好,但在 Windows 上不起作用

我想使用 Python 2.7 使用 SFTP 递归地将包含文件和子文件夹的整个目录结构从 Linux 服务器复制到本地计算机(Windows 和 Linux)。

我可以在同一台机器上使用 WinSCP ping 服务器并下载文件。

我尝试了以下代码,在 Linux 上运行良好,但在 Windows 上不起作用。

我试过\/os.join,全部给了我同样的错误,检查权限也是如此。

import os
import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
sftp=pysftp.Connection('xxxx.xxx.com', username='xxx', password='xxx', cnopts=cnopts)
sftp.get_r('/abc/def/ghi/klm/mno', 'C:\pqr', preserve_mtime=False)
Run Code Online (Sandbox Code Playgroud)
import os
import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
sftp=pysftp.Connection('xxxx.xxx.com', username='xxx', password='xxx', cnopts=cnopts)
sftp.get_r('/abc/def/ghi/klm/mno', 'C:\pqr', preserve_mtime=False)
Run Code Online (Sandbox Code Playgroud)

python linux windows sftp pysftp

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

如何将 .pem 文件导入 AWS Lambda 函数

我正在尝试使用需要私钥文件的 AWS Lambda 连接到 STFP。我能够从本地连接,现在我需要将其部署到 Lambda 函数中。但pysftp.connection需要filepath而不是keystring连接。

我可以使用 YAML 文件将私有文件打包到我的 Lambda 包中吗?

import pysftp

ftp = pysftp.Connection(host = hostname , username=user, port=22, private_key='...pem')
Run Code Online (Sandbox Code Playgroud)

我可以将 pem 文件存储在 AWS SSM 中并在连接到 STFP 时访问文件吗?

amazon-web-services aws-cloudformation pysftp aws-lambda

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

使用 pysftp,如何指定连接的超时值?

使用 pysftp,我了解了如何在连接后为任何命令设置超时,但我不知道如何为连接本身设置超时。我觉得我在某个地方错过了一些东西。只是为了尝试一下,我尝试添加timeout=3到该Connection方法中并收到错误,并尝试使用cnopts.timeout=3,但什么也没做。根据记录,我在 Windows 上使用 Python 3,如果这有什么影响的话。

如果有帮助的话,您可以尝试以下一些简单的测试代码。(实际上,连接在大约 30 秒后超时。)

import pysftp

print("\n"*25)
cnopts=pysftp.CnOpts()
# - I know this next line is insecure, it's just for this test program.
cnopts.hostkeys = None

print('Connecting...')
# - 8.8.8.8 is Google's public DNS server. It doesn't respond to sftp requests at all,
# - so it's a good test case for how long a connection timeout takes.
with pysftp.Connection('8.8.8.8', username='anonymous', password='password',
                    cnopts=cnopts) as SFTP:
    print("Wait, how did you …
Run Code Online (Sandbox Code Playgroud)

python sftp pysftp

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

如何在没有 .pem 文件或替代 .pem 文件的情况下通过 AWS Lambda 使用 pysftp 连接 EC2

我想通过 AWS Lambda 使用 pysftp 库连接 EC2。我使用以下代码进行连接。

mysftp = pysftp.Connection(
    host=Constants.MY_HOST_NAME,
    username=Constants.MY_EC2_INSTANCE_USERNAME,
    private_key="./clientiot.pem",
    cnopts=cnopts,
)
Run Code Online (Sandbox Code Playgroud)

我已经将 .pem 文件和部署包放在 AWS Lambda 中。看这张图片:

带有部署包的 pem 文件

有时它有时不起作用,就像有时它说找不到 .pem 文件一样。

"[Errno 2] No such file or directory: './clientiot.pem'"
Run Code Online (Sandbox Code Playgroud)

如何处理?有什么方法可以安全地访问 .pem 文件或 .pem 文件的数据。

我不想在 AWS lambda 中使用 .pem。

python ssh amazon-web-services pysftp aws-lambda

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