Python 中两个远程服务器之间的 scp

问题描述 投票:0回答:1

我正在尝试使用 Paramiko 连接远程服务器并将一些文件发送到其他远程服务器。我尝试了下面的代码,但它不起作用。我检查了所有连接、用户名和密码参数,没有任何问题。另外,我要传输的文件存在于正确路径中的第一个远程服务器中。

我不将文件下载到本地计算机并上传到第二台服务器的原因是,两个远程服务器之间的连接速度要快得多。

我尝试过的事情:

  • 我将paramiko日志级别设置为debug,但找不到任何有用的信息。

  • 我尝试从命令行从第一台服务器到第二台服务器使用相同的

    scp
    命令,工作正常。

  • 我尝试在

    data = stdout.readlines()
    行之后通过
    stdin.flush()
    进行登录,但没有记录任何内容。

import paramiko
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect("10.10.10.10", 22, username='oracle', password='oracle', timeout=4)

stdin, stdout, stderr = s.exec_command(
        "scp /home/oracle/myFile.txt [email protected]:/home/oracle/myFile.txt")

stdin.write('password\n')
stdin.flush()
s.close()
python paramiko scp
1个回答
1
投票

您无法将密码写入 OpenSSH 的标准输入

scp

在shell中尝试一下,也行不通:

echo password | scp /home/oracle/myFile.txt [email protected]:/home/oracle/myFile.txt

OpenSSH 工具(包括

scp
)仅从终端读取密码。

您可以通过设置

get_pty
SSHClient.exec_command
参数来模拟终端:

stdin, stdout, stderr = s.exec_command("scp ...", get_pty=True)
stdin.write('password\n')
stdin.flush()

尽管启用终端仿真可能会给您带来不必要的副作用。

更好的解决方案是使用公钥身份验证。还有其他解决方法。请参阅如何将密码传递给 scp?(尽管他们内部必须执行类似于

get_pty=True
的操作)。


其他问题:

© www.soinside.com 2019 - 2024. All rights reserved.