繁体   English   中英

在Python中的不同终端中打开SSH会话并运行命令

[英]Opening SSH session and running commands in different terminal in Python

以下是我正在手动执行的过程,并且我想在Python中使其自动化。

  1. 我正在使用以下命令将SSH终端打开到MySQL服务器
cf ssh -L 63380:100.120.11.22:3380 appname
  1. 建立此SSH后,我将按ctrl + t打开新的终端选项卡,然后运行以下命令来创建数据库对象
mysql -u myuser -h 0 -pmypassword -D mydbname -P 3380 < init_db/mysql/schema.ddl

现在,我已经为步骤1编写了Python代码,如下所示

process = subprocess.Popen("cf ssh -L 63380:100.120.11.22:3380 appname",shell = True)

它打开SSH终端,但是使用下面的代码运行第二步时,它没有连接到打开的SSH终端,它说无法连接到MySQL服务器。

pro = subprocess.Popen("mysql -u myuser -h 0 -pmypassword -D mydbname -P 3380 < init_db/mysql/schema.ddl", stdout=subprocess.PIPE,shell=True, preexec_fn=os.setsid) 

我搜索并尝试了其他选项,例如在不同的程序中编写第2步,并在建立SSH后从第一个程序调用,但没有用。

请让我知道Python是否提供任何解决方案。 信封:mac,pcf。

在我看来,该命令如下:

cf ssh -L 63380:100.120.11.22:3380 appname

ssh到您的CloudFoundry应用程序服务器,并将本地计算机端口63380上的所有连接转发到远程端口3380。因此,看来您的mysql连接应该是:

mysql -u myuser -h localhost -pmypassword -D mydbname -P 63380 < init_db/mysql/schema.ddl

本地计算机上的init_db/mysql/schema.ddl

我不确定这是否可以与CloudFoundry一起使用,但是使用ssh可以运行如下所示的远程命令:

ssh username@<host or ip> <command>
#for example:
ssh myname@example.com ls -al

因此,您可以尝试在服务器上放置~/init_db/mysql/schema.dll并使用以下命令:

cf ssh appname mysql -u myuser -pmypassword -Dmydbname -P 3380 < ~/init_db/mysql/schema.dll

您应该能够将该命令放入python的subprocess.Popen()

我找到了避免ssh到mysql的方法。 有一个cf mysql插件,通过它我们可以连接到cf mysql服务并执行查询。 可以在以下位置找到更多详细信息: https : //github.com/andreasf/cf-mysql-plugin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM