【问题标题】:How to transfer a file between two remote servers using scp from a third, local machine in python如何使用 scp 从 Python 中的第三台本地计算机在两个远程服务器之间传输文件
【发布时间】:2023-11-21 07:40:01
【问题描述】:
 I'm using paramiko to login in x machine then 
 after logged in machine x there are file in some path like 
 t="/abc/gfd/*" which 
 i want to copy to some path like 
 p=<username>@<machine-name/ip>:/dfg/hgf/kjh/.

cmd="pwd; scp {0} {1}".format(t,p)
pwd_of_machine_p="xyz"
cmd="xyz; scp {0} {1}".format(t,p)

then executing this cmd with paramiko obj like
client.exec_command(cmd)
which is not working .

当我对这条路径“/dfg/hgf/kjh/”执行 ls 时,我什么也得不到。

【问题讨论】:

  • 在scp期间,它提示输入密码,你是如何处理的,似乎因为这个它不起作用。
  • 是的,我在“cmd”变量中传递密码。像这样 cmd="pwd; scp {0} {1}".format(t,p)
  • 我尝试通过 stdin.write('pwd') 传递密码,但也不起作用

标签: python ssh paramiko scp


【解决方案1】:

你可以使用下面的简单方法而不使用 paramiko。

import os
os.system("scp FILE USER@DEST_MACHINE:PATH")
#e.g. os.system("scp file.txt sunilt@xx.xx.xx.xx:/path/")

但在此之前,您需要在源计算机上生成一个 ssh 密钥并将其复制到目标计算机,以便 scp 自动使用您的公共 ssh 密钥进行身份验证,并且脚本不会要求输入密码。

关于生成和复制ssh密钥的信息是@ssh_keygen_exapmple

【讨论】: