在我创建实例的第一天,我能够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
答案 0 :(得分:3)
查看在尝试SSH到您的实例后提供的输出,看起来您被实际实例上安装/启用的UFW(简单防火墙)阻止,而不是GCP项目范围你设置的防火墙规则(看起来没问题)。
要通过SSH连接到VM,您需要在实例上的UFW中打开端口22。有几种可能的方法可以让你这样做。
首先,请参阅Google Compute Engine - alternative log in to VM instance if ssh port is disabled,特别是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连接到您的实例。
还有一些关于通过串行控制台连接到实例的其他信息:
https://cloud.google.com/compute/docs/instances/interacting-with-serial-console