问题描述
我有一个使用SSH密钥正确设置的外部实例IP。如果我运行以下代码来访问GCP实例。
>> ssh <instance IP>
# Login happens
>> gcloud <some command>
# Gcloud outputs as expected
但是,我无法直接在ssh上运行gcloud
命令。那是
>> ssh <instance IP> gcloud <some command>
bash: gcloud: command not found
我认为,这是某些问题的根本原因,如果我手动在SSH中运行并在交互式shell中运行,则看到我有权在其中运行命令,但是如果我通过ssh传递命令,则无此权限。
我尝试过
>> ssh <INSTANCE IP> -t "source ~/.bashrc; gcloud auth list"
bash: gcloud: command not found
>> gcloud compute ssh instance-name -- -t "gcloud"
bash: gcloud: command not found
>> gcloud compute ssh instance-name --command="gcloud"
bash: gcloud: command not found
以及有关bashrc和gcloud的类似技巧,但是那里没有与Google相关的内容,我仍然可以立即看到。
实例正在运行Ubuntu 20.04,或多或少有新映像。问题出在实例之间,或者在我的本地计算机上连接到实例。
我怀疑我在这里缺少一些简单的东西-有人吗?
解决方法
检查ssh上的二进制位置
>> which gcloud
/snap/bin/gcloud
该问题是由于/snap/bin
不在here所述的PATH上引起的。
该错误正在积极处理中,但似乎尚未完成。它会特别影响ubuntu,并且gcloud
实际上是作为默认发行版中的一个单元而安装的。
这导致了一些误导性的问题-在我的情况下,gcloud
被用作docker的身份验证器,但是缺乏可用性意味着所产生的错误是“缺少权限”错误。
一种解决方法是
>> ssh <instance IP> PATH=$PATH:/snap/bin/ gcloud <some command>
希望这对某人有帮助!