【问题标题】:ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255]错误:(gcloud.compute.ssh)[/usr/bin/ssh] 退出并返回代码 [255]
【发布时间】:2014-11-29 08:57:16
【问题描述】:

在空闲几秒钟后,我一直被踢出我的计算引擎实例,并出现指示的错误 (255)。 我使用“gcloud compute ssh”登录。 我正在使用默认的防火墙设置,我相信这对于 ssh 来说已经足够了。 但是,如果我遗漏了什么,请指出并建议修复此错误。 基本上我现在无法完成任何有效的工作,不得不多次使用 ssh。

提前致谢。

安-

【问题讨论】:

    标签: ssh gcloud


    【解决方案1】:

    如果设置发生变化,gcloud 会拒绝 ssh 连接,例如 在您更改了默认地区或区域,或者您创建了另一个实例之后。 然后,您必须通过

    更新元数据中的 ssh 密钥
    sudo gcloud compute config-ssh
    

    如果这抱怨存储 ssh 密钥条目的配置文件中有不同的条目,~/.ssh/config,请删除此文件并再次执行上述命令。

    如果你安装了没有sudo的gcloud,你可以省略sudo

    【讨论】:

    • 这个没有sudo至少为我解决了上述问题。
    • 救了我的命,工作了 7 个小时没有解决方案,只需一个命令就可以了。
    • 这给了我您现在应该能够在您的实例中使用 ssh/scp。例如,尝试运行:ssh projectid.europe-west4-a.projectname - 结果是“nodename nor servname provided, or not known”
    • 您是在本地运行还是在远程 VM 实例中运行?
    • @ComputerScientist 在 VM 实例上运行以更新公共和私有 SSH 密钥。
    【解决方案2】:

    255 是 ssh 失败的交互式 ssh 退出代码 - 否则交互式 ssh 将使用 ssh 会话中执行的最后一个命令的退出代码退出。

    下次您从 ssh 获得退出代码 255 时,请尝试使用 --ssh-flag="-vvv" 运行(更多 v => 更多调试输出),看看它是否有助于跟踪连接问题。

    【讨论】:

      【解决方案3】:

      对于那些在此页面停留的人。这帮助我解决了问题。 尝试以下操作:

      1. 转到您的 Google 并删除服务器的 SSH 密钥
        • 转到您的谷歌云控制台->计算引擎->元数据->“SSH 键”选项卡,然后单击编辑。在这里您可以删除 ssh 键。
      2. 再次运行 gcloud 命令

        • 点击您的谷歌云账户左侧的“实例”链接,右侧会列出所有实例。在下面 连接栏,你会看到“SSH”下拉菜单,点击“查看云” 命令”,这将带来一个新对话框。复制该命令并在您的 PC 终端上运行。这将让您通过 SSH 连接到谷歌计算引擎。

      这似乎是 Google Cloud Platform 本身的功能/问题,我们将继续检查它。

      【讨论】:

      • 这两个步骤你能说得更准确些吗?你运行了什么命令?
      • @ComputerScientist:更新了答案。谢谢!
      【解决方案4】:

      如果修改了默认网络,或者不使用默认网络,可能需要explicitly enable ssh access by adding a firewall-rule

      $ gcloud compute firewall-rules create --network=YOUR_NETWORK \
      default-allow-ssh --allow tcp:22
      

      之后,重试“gcloud compute ssh”命令。

      【讨论】:

      • 这对我有用!我什至不需要 --network 部分。
      • 2021 年 11 月 - 仍然有效。
      【解决方案5】:

      这是一个真正的问题,处理它的文档很少。

      在使用通过 GCP 控制台提供的 gcloud sdk ssh sn-p 创建实例后的某个时间停止工作,并不断出现 255 错误,使得实例上的 ssh 连接只能通过浏览器通过 GCP 控制台访问相关计算实例。更不用说我在许多不同的情况下都发生了这种情况,其中一些在初始设置和部署后没有触及默认帐户权限,这太令人沮丧了。无缘无故地停止工作......工作,然后不......

      唯一对我有用的是创建一个新用户以通过 gcloud sdk 进行连接!无论是本地的 Windows/PowerShell 还是 Linux,使用以下 sn-p:

      gcloud compute ssh newuser-name@instance-name

      这里的所有 GCP 文档:https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh

      根据文档中的建议传递的所有其他内容 - 端口 22 可以访问意味着它必须是默认用户授权密钥的问题,他们绝对没有提供有关如何修复该问题的文档 - 至少我找不到任何关于修复的信息(不是创建或删除)

      我已尝试更新帐户,尝试从实例中删除用户和凭据,但似乎没有任何效果。使用:

      gcloud compute --project "project-name" ssh --zone "us-east4-a" "instance-name"

      只是没有用... - 甚至尝试过 'gcloud compute config-ssh --force-key-file-overwrite' NOTHING WORKS...

      但是每次都可以创建新用户,并且一旦创建了用户,您就可以通过 gcloud sdk 继续使用该用户

      这是一种变通方法,我讨厌为这样的事情变通,但为了我的理智,这至少在我弄清楚如何重置默认帐户权限之前有效,所以如果有人有任何想法或可以指出我一个方向,我非常感激!

      【讨论】:

      • 使用nmap IPaddress后,输出为:Nmap scan report for IPaddress.bc.googleusercontent.com (IPaddress) Host is up (0.074s latency). Not shown: 994 filtered ports PORT STATE SERVICE 22/tcp closed ssh 80/tcp closed http 443/tcp closed https 3389/tcp closed ms-wbt-server 6000/tcp closed X11 7000/tcp closed afs3-fileserver Nmap done: 1 IP address (1 host up) scanned in 7.32 seconds STATE for PORT:22/tcp被关闭,这件事情怎么办,有什么建议吗?
      【解决方案6】:

      我的错误是默认防火墙将允许所有连接到一个实例。事实证明恰恰相反。请参考an appropriate firewall rule must be set up to allow connection into an instance

      安-

      【讨论】:

        【解决方案7】:

        如果您的设置启用了身份识别代理 (IAP),请尝试将 --tunnel-through-iap 选项添加到 gcloud compute ssh 命令。

        $ gcloud compute ssh --zone <zone> --project <project> --tunnel-through-iap <instance-name>
        

        【讨论】:

        • 我尝试了其他方法,但这是最终奏效的方法:gcloud compute ssh --tunnel-through-iap &lt;instance-name&gt;
        【解决方案8】:

        关于登陆此页面的人的更多信息,如果您使用抢占式实例来节省一些计算成本,这也可能是被这样踢出的原因。您的实例可能刚刚随机停止。

        【讨论】:

          【解决方案9】:

          在我的例子中,我为虚拟机创建了一个可引导磁盘,但没有添加它需要拥有的源映像的信息。因此,即使实例运行正常并且存在 ssh-allow 规则,VM 也没有启动。

          最后将源映像添加到磁盘,我可以通过 ssh 进入虚拟机。

          希望这对某人有所帮助。

          【讨论】:

            【解决方案10】:

            我有同样的错误。我重新启动了 VM 实例并且 ssh 工作正常

            【讨论】:

              【解决方案11】:

              我遇到的问题是,单击 SSH 按钮后,它会继续尝试建立连接并失败。经过长时间的努力,我通过为自己添加服务帐户用户角色来解决它。如果您的帐户是在创建 VM 实例之后创建的,则可能会导致这种情况。

              【讨论】:

              • 这正是我所缺少的部分。我有一个从roles/compute.osLoginroles/iam.serviceAccountUser 角色构建的非常简单的自定义角色。我已经拥有roles/iam.serviceAccountAdmin 角色,虽然可以这样做,但事实证明it's not a supersetroles/iam.serviceAccountUser 角色,它没有授予iam.serviceAccounts.actAs 权限。谢谢!
              【解决方案12】:

              我知道这是很久以前打开的,但有关此主题的最新更新。我在通过 ssh 连接时遇到了同样的问题。它给出了错误代码 225。显然存在连接问题。在VPC network-> Firewall 下已经设置了防火墙规则到allow ssh。然而,为了解决这个问题,我必须去特定的网络并在网络防火墙规则下创建一个规则。 VPC network details -> FIREWALL RULES 并为端口 22 创建入站 TCP 规则。

              【讨论】:

                【解决方案13】:

                有完全相同的症状 - 在我的情况下,原因似乎如下。我使用的是 root 用户 + ssh 密钥,而在 /etc/ssh/sshd_config(PermitRootLogin 属性)中默认禁用了 root 登录。

                【讨论】:

                • 请将信息发布为评论而不是答案。
                • 嗨,Jacob - 我实际上尝试过,遗憾的是我的个人资料(初学者)不允许我对上面发布的答案添加评论(以最优惠的价格):/ ...“一旦你有足够的声誉您将能够对任何帖子发表评论”
                【解决方案14】:

                我最终不得不删除我的实例并使用相同的磁盘创建一个新实例。详情请见https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh#use_your_disk_on_a_new_instance

                【讨论】:

                  【解决方案15】:

                  对我来说,我的其他队友能够登录机器,但我不能。所以我要求他们用我的名字创建一个具有 sudo 权限的用户,登录到串行控制台并将passwordAuthentication 更改为yes,然后是sudo service ssh restart(少数可能是sudo service sshd restart。)

                  发布这个我可以登录 ssh -o PreferredAuthentications=password username@publicIP -p 22

                  这个技巧对我很有效。

                  【讨论】:

                    【解决方案16】:

                    使用“gcloud init”重新初始化 gcloud 并生成新的 ssh 密钥为我解决了这个问题。

                    【讨论】:

                      【解决方案17】:

                      我有同样的问题。

                      我已连接串行控制并检查了日志。并且有一些错误日志,例如“没有磁盘空间”。然后我按照this document 中的说明调整了磁盘大小。

                      现在我可以使用 ssh 连接到实例了。

                      【讨论】:

                        【解决方案18】:

                        尝试切换到其他互联网连接


                        所以,我遇到了同样的错误,但在我的情况下,我根本无法登录到实例。

                        (base) girish@girish:~$ gcloud beta compute ssh --zone "asia-east1-b" "fp-1" --project "fp-public"
                        ssh: connect to host 12.345.678.90 port 22: Resource temporarily unavailable
                        ERROR: (gcloud.beta.compute.ssh) [/usr/bin/ssh] exited with return code [255].
                        

                        (base) girish@girish:~$ gcloud beta compute ssh  --ssh-flag='-vvv' --zone "asia-east1-b" "fp-1" --project "fp-public"
                        OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
                        debug1: Reading configuration data /etc/ssh/ssh_config
                        debug1: /etc/ssh/ssh_config line 19: Applying options for *
                        debug2: resolving "12.345.678.90" port 22
                        debug2: ssh_connect_direct: needpriv 0
                        debug1: Connecting to 12.345.678.90 [12.345.678.90] port 22.
                        [debug1: connect to address 12.345.678.90 port 22: Resource temporarily unavailable
                        ssh: connect to host 12.345.678.903 port 22: Resource temporarily unavailable
                        ERROR: (gcloud.beta.compute.ssh) [/usr/bin/ssh] exited with return code [255].
                        

                        什么对我有用: 我尝试重新安装很多东西并重新初始化各种配置,然后登陆 thread,它建议更改您正在使用的 Internet 网络并且它有效!

                        【讨论】:

                          【解决方案19】:

                          您的规则可能只允许列入白名单的 IP SSH 进入 gcloud 虚拟机。所以你可能忘记启用你的工作 VPN 或离开你工作的办公室 IP。

                          【讨论】:

                            【解决方案20】:

                            尝试重新启动计算机。

                            我遇到了同样的错误并尝试了前面提到的 gcloud config ssh 无济于事。然后我检查了 serviceaccount 和 developer 的 ID 和角色是否具有“编辑”权限,这很好。我启动了一个新实例并注销了所有其他谷歌帐户,但它仍然抛出错误。然后,我重新启动了计算机,但没有重新登录我的其他 Google 帐户。这样就解决了。

                            【讨论】:

                              【解决方案21】:

                              使用 IAP 时,GCP 将密钥存储在实例元数据中,然后传播 到~/.ssh/authorized_keys 文件。
                              当您从 ~/.ssh/authorized_keys 文件中删除密钥并且它仍在实例元数据中时,您可能会收到 OP 所说的错误。原因是:

                              1. GCP 检查您用于 ssh 的用户组合键是否已在实例元数据中。
                              2. 它假定该用户的 ~/.ssh/authorized_keys 文件中存在 并且不传播密钥。
                              3. 由于任何原因(您删除了它,其他人删除了它等等),~/.ssh/authorized_keys 文件中不存在该密钥 - 您会被拒绝访问。

                              如果您是这种情况,那么修复很简单:删除该用户的实例元数据条目,键组合(已附加图像作为参考,只需单击 X 并删除您的故障键)并再次尝试 ssh

                              【讨论】:

                                猜你喜欢
                                • 2018-07-26
                                • 1970-01-01
                                • 2012-01-26
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2021-10-09
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多