下面是我手动执行的过程,我想用 Python 将其自动化。
- 我正在使用以下命令打开 MySQL 服务器的 SSH 终端
cf ssh -L 63380:100.120.11.22:3380 appname
- 建立 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()
中。
关于python - 在 Python 的不同终端中打开 SSH session 并运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009732/