- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 Python 脚本将文件从远程计算机复制到本地计算机。我只知道文件名的扩展名,所以我想使用通配符来表达文件名。
此外,我想使用 SCPClient Python 库,而不是直接使用 os.system,如标题为 using wildcards in filename in scp in python 的问题中所建议的那样。
但是当我运行以下代码时:
from paramiko import SSHClient
import paramiko
from scp import SCPClient
with SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.100.5', username= 'root', password='Secret')
with SCPClient(ssh.get_transport()) as scp:
scp.get(remote_path='/root/*.py', local_path='.')
我遇到异常
scp.SCPException: scp: /root/*.py: No such file or directory
从 shell 运行效果很好
scp root@10.10.100.5:/root/*.py .
最佳答案
您需要将 sanitize 添加到 get_transport()
中:
with SCPClient(ssh.get_transport(), sanitize=lambda x: x) as scp:
scp.get(remote_path='/root/*.py', local_path='.')
否则通配符将按字面意思处理。
2020 年 9 月编辑:这个答案有些令人困惑。上面的代码不清理任何东西,但它提供了强制的清理功能。 Paramiko 没有有我们现在要关闭的默认 sanitizer 。无论清理发生或不发生,都必须来自于实现,因为 Paramiko 无法知道哪些路径在您的特定环境中是安全的。
如果根本不存在任何清理功能,则所有通配符都会按字面解释 - 我认为出于安全原因,因为通配符对于不受信任的输入是危险的。该设计迫使实现通过添加某种 sanitizer 功能来考虑 sanitizer 。如果没有,通配符就不起作用。
为了使通配符发挥作用,需要有一个清理函数来返回清理后的路径。上面的 lambda 是一个虚拟函数,它返回输入给它的任何内容 - 这意味着它根本不执行任何清理操作,但由于现在有一个清理函数,因此通配符现在开始作为通配符使用。
如果您不相信自己的输入,请勿执行此操作。在这种情况下,您需要编写一个适当的清理程序来确保该路径可以安全使用。您将需要编写一个返回清理路径的函数。
关于python - 使用 Python 的 SCPClient 库在文件名中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926123/
我是 SCPClient 模块的新手 我有复制样本作为 with SCPClient(ssh.get_transport()) as scp: scp.put(source, destina
我想使用 Python 脚本将文件从远程计算机复制到本地计算机。我只知道文件名的扩展名,所以我想使用通配符来表达文件名。 此外,我想使用 SCPClient Python 库,而不是直接使用 os.s
我需要递归地将目录(在本例中为 C:\test)复制到远程主机。我尝试了显而易见的: conn.connect(); conn.authenticateWithPassword("user", "pw
我正在编写一个用于自动将文件传送到 Cisco 设备的脚本,当设备未配置为 SCP 服务器时,我收到一个错误,导致我的整个脚本终止。 我已经为其他脚本终止异常添加了两个异常,但是当我尝试为这个 SCP
我是一名优秀的程序员,十分优秀!