【发布时间】:2015-01-27 15:46:48
【问题描述】:
我想通过 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]
据我了解,要在第一个命令之后执行第二个命令,我需要将第二个命令的标准输入设置为第一个命令的标准输出,并且按照相同的逻辑,对第三个命令执行此操作。但是,当脚本执行到第三个命令时,pwd 给了我本地计算机的路径而不是远程服务器上的路径,并且我要复制到远程服务器的文件也没有复制。我究竟做错了什么? 这只是我需要在远程服务器上执行的前几个命令,一旦我了解了它的工作原理,其他命令就很容易了。
谢谢
【问题讨论】:
-
改用
paramiko模块。 -
这整个问题正是 Fabric 想要解决的问题。
标签: python