无法ssh到Google VM引擎

无法ssh到Google VM引擎,ssh,google-compute-engine,Ssh,Google Compute Engine,在我创建实例的第一天,我能够用SSH连接,没有问题,但是昨天之后,我就无法连接到我的实例。当我检查控制台时,我得到了这样的东西 Nov 5 15:30:49 my-app kernel: [79738.555434] [UFW BLOCK] IN=ens4 OUT= MAC=42:01:0a:94:00:02:42:01:0a:94:00:01:08:00 SRC=71.15.27.115 DST=10.121.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=3

在我创建实例的第一天,我能够用SSH连接,没有问题,但是昨天之后,我就无法连接到我的实例。当我检查控制台时,我得到了这样的东西

Nov  5 15:30:49 my-app kernel: [79738.555434] [UFW BLOCK] IN=ens4 OUT= MAC=42:01:0a:94:00:02:42:01:0a:94:00:01:08:00 SRC=71.15.27.115 DST=10.121.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=38049 PROTO=TCP SPT=37344 DPT=22 WINDOW=60720 RES=0x00 SYN URGP=0 
我认为这是一个防火墙问题,但我的防火墙规则似乎没有问题(假设自创建实例以来我没有做任何更改)。我想知道还有什么问题?这是我的fw配置

default-allow-http
http-server 
IP ranges: 0.0.0.0/0
tcp:80  
Allow
1000
default

default-allow-https
https-server    
IP ranges: 0.0.0.0/0
tcp:443 
Allow
1000
default

default-beego-http
http-server 
IP ranges: 0.0.0.0/0
tcp:8080    
Allow
1000
default

default-jenkins-app
http-server 
IP ranges: 0.0.0.0/0
tcp:8989    
Allow
1000
default

default-allow-icmp
Apply to all    
IP ranges: 0.0.0.0/0
icmp    
Allow
65534
default

default-allow-internal
Apply to all    
IP ranges: 10.128.0.0/9
tcp:0-65535, udp:0-65535, 1 more    
Allow
65534
default

default-allow-rdp
Apply to all    
IP ranges: 0.0.0.0/0
tcp:3389    
Allow
65534
default

default-allow-ssh
Apply to all    
IP ranges: 0.0.0.0/0
tcp:22  
Allow
65534
default

查看您在尝试SSH连接到实例后提供的输出,您似乎被实际实例上安装/启用的UFW(简单防火墙)阻止,而不是您设置的GCP项目范围的防火墙规则(这些规则看起来没问题)

为了SSH到您的VM中,您需要在实例的UFW中打开端口22。有几种可能的方法可以让你做到这一点

首先,请参见Adrián的答案,该答案解释了如何使用启动脚本打开端口22。此方法要求您在应用防火墙规则之前重新启动实例

另一种不需要重新启动机器的方法是使用串行控制台。但是,要使用此方法,需要VM的密码。因此,只有在您以前在VM上设置了密码(在失去访问权限之前)时,才可以使用此方法

要通过串行控制台连接,必须将以下元数据添加到您尝试连接的实例或整个项目中:

serial-port-enable=1
您可以将元数据应用于特定实例,如下所示:

gcloud compute instances add-metadata [INSTANCE_NAME]  \
    --metadata=serial-port-enable=1
或者,也可以通过运行以下命令来执行整个项目:

gcloud compute project-info add-metadata --metadata=serial-port-enable=1
设置此元数据后,您可以通过从Cloud Shell运行以下命令,尝试通过串行控制台连接到实例:

gcloud compute connect-to-serial-port [INSTANCE_NAME]
访问该实例后,您将能够管理UFW规则。要打开端口22,您可以运行:

sudo /usr/sbin/ufw allow 22/tcp
一旦UFW端口22打开,您就应该能够从Cloud Shell或控制台SSH到您的实例中

这里有一些关于通过串行控制台连接到实例的附加信息:


查看您在尝试通过SSH连接到实例后提供的输出,您似乎被实际实例上安装/启用的UFW(简单防火墙)阻止,而不是您设置的GCP项目范围的防火墙规则(这些规则看起来没问题)

为了SSH到您的VM中,您需要在实例的UFW中打开端口22。有几种可能的方法可以让你做到这一点

首先,请参见Adrián的答案,该答案解释了如何使用启动脚本打开端口22。此方法要求您在应用防火墙规则之前重新启动实例

另一种不需要重新启动机器的方法是使用串行控制台。但是,要使用此方法,需要VM的密码。因此,只有在您以前在VM上设置了密码(在失去访问权限之前)时,才可以使用此方法

要通过串行控制台连接,必须将以下元数据添加到您尝试连接的实例或整个项目中:

serial-port-enable=1
您可以将元数据应用于特定实例,如下所示:

gcloud compute instances add-metadata [INSTANCE_NAME]  \
    --metadata=serial-port-enable=1
或者,也可以通过运行以下命令来执行整个项目:

gcloud compute project-info add-metadata --metadata=serial-port-enable=1
设置此元数据后,您可以通过从Cloud Shell运行以下命令,尝试通过串行控制台连接到实例:

gcloud compute connect-to-serial-port [INSTANCE_NAME]
访问该实例后,您将能够管理UFW规则。要打开端口22,您可以运行:

sudo /usr/sbin/ufw allow 22/tcp
一旦UFW端口22打开,您就应该能够从Cloud Shell或控制台SSH到您的实例中

这里有一些关于通过串行控制台连接到实例的附加信息:


当我这样做时,我会收到错误“您在紧急状态下无法打开控制台访问权限,根帐户已锁定。有关详细信息,请参阅sulogin(8)手册页。按Enter键继续。”按Enter键只需再次写入相同的消息。当我这样做时,我会收到错误“您处于紧急状态,无法打开对控制台的访问,根帐户已锁定。有关更多详细信息,请参阅sulogin(8)手册页。按Enter键继续。“按Enter键只需再次写入相同的消息。