我正在尝试使用 CircleCI 通过 SSH 进入我的 Compute Engine 实例,命令如下(在 config.yml 中):
gcloud --quiet compute ssh [INSTANCE_NAME] --zone northamerica-northeast1-a --project [PROJECT_NAME] cd /var/www/dev
我可以成功验证身份并在 CircleCI 日志中看到命令提示符。但是,SSH 后的命令没有执行。我在这里做错了什么?
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Sep 12 15:53:55 2018 from 18.212.180.159
[USER_NAME]:~$
我希望在验证成功后运行 cd 命令。
答案1
使用 SSH,似乎无法通过传递命令来更改目录,这是 SSH 的限制Serverfault 帖子。一般来说,你可以使用 flag 通过 SSH 运行可执行文件-c
,同样也可以使用--command
使用 gcloud 类似这个例子。
gcloud compute ssh --zone=us-east1-c test --command="nohup ping -i 5 google.com > foo.out 2> foo.err < /dev/null &"
但是,从上面的 serverfault 帖子来看,-t
除了在一个语句中执行多个命令之外,还可以使用标志来更改目录。幸运的是,gcloud 也可以通过添加来使用此类标志--ssh-flag
。下面是改变目录并输出系统路径的例子。
gcloud compute ssh --zone=us-central1-c instance-2 --ssh-flag="-t" --command="cd /bin; pwd"
/bin
Connection to xx.xx.xx.xx closed.
请注意,执行完最后一个命令后,SSH 退出(连接关闭)pwd
。要保持登录状态并按照帖子中的建议使用bash --login
我不确定 circleCI 中命令是如何运行的,但一般来说,要在 Linux 中运行命令,您可以直接指定完整路径,而不是更改目录。例如,/some/directory/executablefile
将运行executablefile
。