0

这是我需要做的:

我需要通过网络复制文件。要复制的文件在一台机器上,我需要将它发送到远程机器上。它应该是自动化的,并且应该使用 python 制作。我对python的os.popen和subprocess.Popen相当熟悉。我可以用它来复制文件,但是,问题是一旦我运行了单行命令(如下所示)

scp xxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt

它肯定会要求类似的东西

您确定要连接(是/否)?

密码 :

如果我没记错的话,一旦我发送了这个命令(假设我在 python 中编码)

conn.modules.os.popen("scp xxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt")

然后是这个命令

conn.modules.os.popen("是")

如果我在终端中手动输入,输出(我很确定它会给我错误)与输出相比会有所不同。

你知道如何在 python 中编写代码吗?或者你能告诉我一些可以解决我问题的东西(命令等)吗

注意:我正在使用 RPyC 连接到其他远程机器并且所有机器都在 CentOS 上运行

4

3 回答 3

2

通过 Python 执行此操作的正确方法实际上是fabric按照上面评论中的说明使用。

创建一个名为fabfile.py

#!/usr/bin/python

from fabric.api import run, env, sudo, put

env.user = 'user'
env.hosts = ['xxxxx.org',]

def copy():
    put('wong_8066.zip', '/home1/user/wong_8066.zip')

然后在本地机器上运行fab copy,它会提示输入密码。

yeukhon@yeukhon-P5E-VM-DO:~$ fab copy
[xxxxxx.org] Executing task 'copy'
[xxxxxx.org] Login password: 
[xxxxxx.org] put: wong_8066.zip -> /home1/user/wong_8066.zip

Done.

你可以用织物做更多的事情。Fabric 用于部署。您可以使用fabric 在本地运行东西,或远程运行多个主机。您可以在运行时传递许多选项。

如果您想在没有 的情况下自动执行此操作password prompt,则可以按照文档中的说明指定 ssh-key 的路径。

fab 使用 Python 的 optparse 库,这意味着它尊重典型的 Linux 或 GNU 风格的短选项和长选项,以及自由混合选项和参数。例如 fab task1 -H hostname task2 -i path/to/keyfile 与更直接的 fab -H hostname -i path/to/keyfile task1 task2 一样有效。

于 2012-09-27T03:53:22.920 回答
0

根据我的经验,第一次使用 sftp 会提示用户接受主机公钥,例如

The authenticity of host 'xxxx' can't be established. RSA key fingerprint is xxxx. Are you sure you want to continue connecting (yes/no)? 一旦你输入yes,公钥就会保存在~/.ssh/known_hosts 中,下次你不会得到这样的提示/警报。

为避免批处理脚本中出现此提示/警报,您可以使用 turn strict host check off use

scp -Bqpo StrictHostKeyChecking=no

但是你很容易受到中间人攻击。

您还可以选择在部署批处理脚本之前手动连接到目标服务器并保存主机公钥。

于 2012-09-27T03:39:29.553 回答
0

这个问题似乎涵盖了您正在尝试做的事情。

用于shutil.copyfile()使用操作系统级别的复制实用程序

如果你不想点击链接,这里是:

import shutil
source_path = r"\\mynetworkshare"
dest_path = r"C:\TEMP"
file_name = "\\myfile.txt"

shutil.copyfile(source_path + file_name, dest_path + file_name)
于 2012-09-27T03:27:54.267 回答