gcloud compute ssh --command 标志不起作用

gcloud compute ssh --command flag not working

我正在使用来自计算引擎 vm1 的 google 的 compute ssh 命令来连接另一个项目的 vm2。当我尝试连接 --command 标志时出现问题。 shell 命令未执行,但已建立 ssh 连接。但是我可以在 vm2 的进程中看到 bash 命令作为 pid =xxxx 'bash -c sudo su && service nginx stop && source /home/x/bin/activate && python example.py' 当我从 vm1 终止 ssh 命令时,bash 命令立即在 vm2 上启动。我无法弄清楚是什么导致了这个问题。

sudo gcloud compute ssh --project=project_name vm_name --zone=zone --command='sudo su && service nginx stop && source /home/x/bin/activate && python example.py'

OS: ubuntu 18.04

该命令集不起作用。您正在接近它,就好像您是 运行 在终端内执行命令一样,在这种情况下:

  • sudo su(会给你一个 root shell 并且所有后续命令都会 运行 作为 root)
  • service nginx stop(你是 root)
  • source /home/x/bin/activate(你是 root)
  • python example.py(你是 root)

当您尝试使用 && 链接您的命令时,它 运行 是第一个命令起作用后的下一个命令,并且所有命令实际上都是 运行,因为您:

  • sudo su(运行和你一样,成功退出后触发下一条命令)
  • service nginx stop(如你)
  • 等(如你)

所以最终发生的事情是你获得了根 shell 然后什么都没有。除非它(干净地)退出,否则您不会 运行 链中的下一个命令,所以您正在等待,因为根 shell 也在等待。正如@DazWilkin 上面提到的,你实际上应该做的是删除 sudo su (你不需要根 shell,无论如何你不能在那里做任何事情)并在你的其他命令前加上sudo 而不是这样他们每个人都 运行 具有更高的权限。