我正在编写一个简单的脚本来连接我的 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的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 服务器。它成功连接到服务器,但显示以下警告(见下文)。它是什么意思以及如何删除它。代码中需要进行哪些更改?
我的代码:
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) 我编写了这个脚本来将文件从 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)
不要担心我没有主机密钥或密码。一旦我让脚本工作,我就不会保持这种状态:)
我想传递我的实际私钥值作为参数,而不是提供文件路径。
到目前为止我已经使用了以下代码:
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)
在实际场景中,我会将我的私钥文本放置在安全保管库中。
我正在使用 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 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) 我正在尝试使用需要私钥文件的 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 时访问文件吗?
使用 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) 我想通过 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 文件一样。
"[Errno 2] No such file or directory: './clientiot.pem'"
Run Code Online (Sandbox Code Playgroud)
如何处理?有什么方法可以安全地访问 .pem 文件或 .pem 文件的数据。
我不想在 AWS lambda 中使用 .pem。
pysftp ×10
python ×9
sftp ×6
aws-lambda ×3
ssh ×3
callback ×1
linux ×1
paramiko ×1
private-key ×1
python-3.x ×1
windows ×1