Python中两个远程服务器之间的scp
我正在尝试使用Paramiko连接远程服务器,并将一些文件发送到其他远程服务器。我尝试了下面的代码,但没有成功。我检查了所有连接、用户名和密码参数,它们没有任何问题。我要传输的文件也存在于第一个远程服务器的正确路径中 我不将文件下载到本地计算机并上传到第二台服务器的原因是,两台远程服务器之间的连接速度要快得多 我尝试过的事情:Python中两个远程服务器之间的scp,python,paramiko,scp,Python,Paramiko,Scp,我正在尝试使用Paramiko连接远程服务器,并将一些文件发送到其他远程服务器。我尝试了下面的代码,但没有成功。我检查了所有连接、用户名和密码参数,它们没有任何问题。我要传输的文件也存在于第一个远程服务器的正确路径中 我不将文件下载到本地计算机并上传到第二台服务器的原因是,两台远程服务器之间的连接速度要快得多 我尝试过的事情: 我将paramiko日志级别设置为debug,但找不到任何有用的信息 我从命令行尝试了相同的scp命令从第一台服务器到第二台服务器,效果很好 我试图在stdin.f
- 我将paramiko日志级别设置为debug,但找不到任何有用的信息
- 我从命令行尝试了相同的
命令从第一台服务器到第二台服务器,效果很好scp
- 我试图在
行之后通过stdin.flush()
进行日志记录,但没有记录任何内容data=stdout.readlines()
您不能将密码写入OpenSSH的标准输入
scp
在外壳中尝试,也不会起作用:
echo密码| scp/home/oracle/myFile.txtoracle@10.10.10.20:/home/oracle/myFile.txt
OpenSSH工具(包括scp
)仅从终端读取密码
您可以通过设置以下参数来模拟终端:
尽管启用终端仿真可能会带来不必要的副作用
更好的解决方案是使用公钥身份验证。还有其他解决办法。请参阅(尽管他们内部必须执行类似于get_pty=True
的操作)
其他问题:
- 您必须等待命令完成。调用
可能会终止传输。在大多数情况下,使用stdout.readlines()即可。但它可能会挂起来,看吧s.close()
- 不要使用
–这样做会使您失去保护。有关正确的解决方案,请参阅AutoAddPolicy
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 oracle@10.10.10.20:/home/oracle/myFile.txt")
stdin.write('password\n')
stdin.flush()
s.close()
stdin, stdout, stderr = s.exec_command("scp ...", get_pty=True)
stdin.write('password\n')
stdin.flush()