不能ssh到谷歌VM引擎

时间:2017-11-05 15:47:44

标签: 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=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

1 个答案:

答案 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