python - 带有 paramiko 的 SCP,使用不同的远程和本地目录

标签 python linux paramiko

我有一段使用 Paramiko 的 Python 代码。

#!/usr/bin/env python

import paramiko

username = ('user')
password = ('1234')
hostname = ('test-server.com')
ports = 22
localD = ('/var/tmp/testxxxxxxxx.tar.gz')
remoteD = ('/var/tmp/testxxxxxxxx.tar.gz')



paramiko.util.log_to_file('/tmp/paramiko.log')
transport = paramiko.Transport((hostname, ports))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(remotepath=remoteD, localpath=localD)

sftp.close()
transport.close()

使用这段代码,local-dir 和 remote-dir 应该是相等的。如果不是“找不到文件” 我如何更改或使用不同于本地目录的另一个远程目录? 示例:

localD = ('/var/tmp/testxxxxxxxx.tar.gz')
remoteD = ('/home/user/testxxxxxxxx.tar.gz')

谢谢

最佳答案

由于错误消息显示“没有这样的文件或目录”,我会首先检查以确保该目录存在于远程系统上并且可由您使用的凭据写入。 SFTPClient 类具有各种其他方法,您可以调用这些方法来验证目标路径是否存在并在它们不存在时创建它们。

例如,调用传入目标路径的 stat() 方法应该返回一个与 os.stat 返回的元组相同的元组。尝试运行此脚本(我只是破解了一个小路径检查例程并将其放入您的脚本中):

#!/usr/bin/env python

import paramiko

username = ('user')
password = ('1234')
hostname = ('test-server.com')
ports = 22
localD = ('/var/tmp/testxxxxxxxx.tar.gz')
remoteD = ('/var/tmp/testxxxxxxxx.tar.gz')

def check(sftp, path):
    parts = path.split('/')
    for n in range(2, len(parts) + 1):
        path = '/'.join(parts[:n])
        print 'Path:', path,
        sys.stdout.flush()
        try:
            s = sftp.stat(path)
            print 'mode =', oct(s.st_mode)
        except IOError as e:
            print e

paramiko.util.log_to_file('/tmp/paramiko.log')
transport = paramiko.Transport((hostname, ports))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
check(sftp, remoteD)

sftp.close()
transport.close()

输出应该是这样的:

Path: /var mode = 040755
Path: /var/tmp mode = 040700
Path: /var/tmp/testxxxxxxxx.tar.gz [Errno 2] No such file

模式编号很可能会有所不同,但除了文件名之外,您不应该在路径的任何部分出现“没有这样的文件”错误。如果你这样做,那么这可能意味着你需要使用 sftp.mkdir() 构建路径到你想要放置文件的位置

关于python - 带有 paramiko 的 SCP,使用不同的远程和本地目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338911/

相关文章:

Python:如何从文本文件中提取字符串以用作数据

python - 根据使用的导入生成需求

linux - Xinetd 禁用标准错误重定向

python - 使用 Paramiko 在远程机器上执行命令无效

python - 使用SSH中的SSH ProxyCommand的SFTP

python - 如何按字典顺序(按计数器,然后按值)对 Counter.mostCommon(n) 的结果进行排序?

python - 我的 "library sort"实现的经验复杂度似乎与 O(n log n) 之类的不匹配

linux - 由自定义 Web 服务器提供的 html 文件的最佳位置

linux - 未设置 GOPATH 环境变量

proxy - paramiko:SSH 端口转发以获取 SQL 转储