如何使用SCP或SSH在Python中将文件复制到远程服务器?

144
我有一个文本文件存在本地机器上,该文件是由每日运行在cron中的Python脚本生成的。
我想添加一些代码,将该文件通过SSH安全地发送到我的服务器上。
14个回答

1
我使用sshfs通过ssh挂载远程目录,然后使用shutil复制文件:
$ mkdir ~/sshmount
$ sshfs user@remotehost:/path/to/remote/dst ~/sshmount

然后在Python中:
import shutil
shutil.copy('a.txt', '~/sshmount')

这种方法的优点在于,如果您正在生成数据而不是本地缓存并发送单个大文件,则可以流式传输数据。

1

如果您想使用SSL证书,请尝试以下内容:

import subprocess

try:
    # Set scp and ssh data.
    connUser = 'john'
    connHost = 'my.host.com'
    connPath = '/home/john/'
    connPrivateKey = '/home/user/myKey.pem'

    # Use scp to send file from local to host.
    scp = subprocess.Popen(['scp', '-i', connPrivateKey, 'myFile.txt', '{}@{}:{}'.format(connUser, connHost, connPath)])

except CalledProcessError:
    print('ERROR: Connection to host failed!')

0

通过子进程调用scp命令无法在脚本内接收进度报告。可以使用pexpect来提取该信息:

import pipes
import re
import pexpect # $ pip install pexpect

def progress(locals):
    # extract percents
    print(int(re.search(br'(\d+)%$', locals['child'].after).group(1)))

command = "scp %s %s" % tuple(map(pipes.quote, [srcfile, destination]))
pexpect.run(command, events={r'\d+%': progress})

请参见在本地网络中复制Python文件(Linux->Linux)


-1

有点取巧,但以下方法应该可行 :)

import os
filePath = "/foo/bar/baz.py"
serverPath = "/blah/boo/boom.py"
os.system("scp "+filePath+" user@myserver.com:"+serverPath)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接