首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中使用SCP或SSH将文件复制到远程服务器?

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

Stack Overflow用户
提问于 2008-09-16 00:50:11
回答 13查看 326.9K关注 0票数 123

我在本地机器上有一个文本文件,它是由在cron中运行的每日Python脚本生成的。

我想添加一些代码,以便通过SSH将该文件安全地发送到我的服务器。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-09-16 00:55:44

您可以使用subprocess.run调用scp bash命令(它通过SSH复制文件

代码语言:javascript
运行
复制
import subprocess
subprocess.run(["scp", FILE, "USER@SERVER:PATH"])
#e.g. subprocess.run(["scp", "foo.bar", "joe@srvr.net:/path/to/foo.bar"])

如果您正在创建要在同一个Python程序中发送的文件,那么您需要在用于打开该文件的with块之外调用subprocess.run命令(或者,如果您没有使用.close()块,则首先对该文件调用with ),这样您就可以知道它是从Python刷新到磁盘的。

您需要预先生成(在源计算机上)并安装(在目标计算机上) ssh密钥,以便使用您的公共ssh密钥自动对scp进行身份验证(换句话说,这样您的脚本就不会要求输入密码)。

票数 64
EN

Stack Overflow用户

发布于 2008-09-16 05:27:59

要在Python语言中使用Paramiko库完成此操作(即不通过subprocess.Popen或类似的方法包装scp ),您可以这样做:

代码语言:javascript
运行
复制
import os
import paramiko

ssh = paramiko.SSHClient() 
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, password=password)
sftp = ssh.open_sftp()
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()

(您可能希望处理未知主机、错误、创建任何必要的目录等)。

票数 167
EN

Stack Overflow用户

发布于 2008-09-16 00:58:49

您可能会使用subprocess module。如下所示:

代码语言:javascript
运行
复制
import subprocess
p = subprocess.Popen(["scp", myfile, destination])
sts = os.waitpid(p.pid, 0)

其中,destination的形式可能是user@remotehost:remotepath。感谢@Charles Duffy指出了我最初答案中的不足之处,我最初的答案使用了一个字符串参数来指定scp操作shell=True -它不会处理路径中的空格。

模块文档包含examples of error checking that you may want to perform in conjunction with this operation.

确保您设置了正确的凭据,以便可以执行unattended, passwordless scp between the machines。有一个stackoverflow question for this already

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档