我想ssh进入服务器,并在登录到该服务器后在该服务器上执行许多bash命令,而我想使用python脚本来做到这一点。我仅限于使用子进程(不允许导入其他模块,例如pexpect或paramiko)
这是我到目前为止的代码:

import sys
import os
import subprocess
import time

user = "let's say a user"
host = "the remote server's ip"
sshCommand = "sshpass -p 'the remote server's password' ssh -o     UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no %s@%s" %(user, host)
process1 = subprocess.Popen(sshCommand, shell=True, stdout = subprocess.PIPE)
copyfileCommand = "scp afile.file user@serverip: path of server directory"
process2 = subprocess.Popen(copyfileCommand, shell=True, stdin = process1.stdout, stdout = subprocess.PIPE,  stderr=subprocess.STDOUT)

pwdcommand = "pwd"
process3 = subprocess.Popen(pwdcommand, shell=True, stdin = process2.stdout, stdout=subprocess.PIPE,  stderr=subprocess.STDOUT)
out, err = process3.communicate()[0]


据我了解,要在第一个命令之后执行第二个命令,我需要将第二个命令的stdin设置为第一个命令的stdout,并按照相同的逻辑,对第三个命令执行此操作。但是,当脚本执行到第三个命令时,pwd给了我本地计算机的路径,而不是远程服务器上的路径,并且我要复制到远程服务器的文件也没有复制。我究竟做错了什么?
这只是我需要在远程服务器上执行的前几个命令,一旦我了解了它的工作原理,其他命令都很容易。

谢谢

最佳答案

您正在混淆一些事情。 Popen仅在本地主机上起作用;如果要执行远程命令,则有以下几种选择:


在命令行上将要执行的命令与ssh一起传递。
通过stdin将命令通过stdin传递到远程shell。
使用paramiko

关于python - 如何使用服务器SSH到服务器并在该服务器上执行bash命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28174417/

10-16 23:03