【问题标题】:Copying files between two remote Linux server via SCP using Python Paramiko使用 Python Paramiko 通过 SCP 在两个远程 Linux 服务器之间复制文件
【发布时间】:2018-09-04 09:38:52
【问题描述】:

我有 3 台机器:

  • 服务器 A(运行代码的构建机器)
  • 服务器 B (Linux)
  • 服务器 C (Linux)

我的代码在服务器 A 中运行。我想 ssh 到服务器 B,然后将文件复制到服务器 C。我想使用服务器 B 和服务器 C 的密码而不是密钥。

就我而言,我可以编写代码来使用 Paramiko 将文件从本地机器复制到远程机器。我在 stackoverflow 上寻找了许多解决方案,如下所示:

import paramiko
from scp import SCPClient
def createSSHClient(server, port, user, password):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(server, port, user, password)
    return client
ssh = createSSHClient(server, port, user, password)
scp = SCPClient(ssh.get_transport())
cp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')

但是文件再次从本地(运行代码的地方)复制到远程,而不是远程到远程。

【问题讨论】:

  • 我尝试使用 paramiko ssh 并发送 scp 命令,然后使用 stdin 发送密码。但问题是 scp(以及后端的 ssh)直接从终端接受密码,而不是从标准输入接受密码(不像 'sudo -S')

标签: python ssh paramiko scp


【解决方案1】:

您不能为此使用 SCPClient 类。

您必须登录到服务器 B 并在那里运行scp 命令行客户端才能将(本地 - 从服务器 B 开始)文件上传到服务器 C。

python paramiko run command

您将无法将密码传递给scp。你最好用钥匙。如果您不想使用密钥,则必须使用此处描述的一些技巧:

(以及无数其他坚持不使用钥匙的绝望者的类似问题)

【讨论】:

  • scp 对我不起作用,因为我对问题的评论中提到了原因(scp 直接从终端接受密码,而不是从标准输入接受密码)。我也不想使用 'sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path' 因为需要在客户端和服务器机器上安装 sshpass。同样在无数个问题中,我无法为这种情况得到正确的答案。不知道这是否可以使用 paramiko 。
  • 我知道这一切。使用钥匙!如果您仍然坚持使用密码破解,请在调用 exec_command 时使用 get_pty=True
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 2019-11-07
  • 2016-04-19
  • 2020-01-15
  • 1970-01-01
  • 2012-01-05
  • 2020-02-25
  • 2016-11-15
相关资源
最近更新 更多