如何通过SSH连接到从自定义映像创建的GCE实例?

时间:2014-02-19 12:52:53

标签: ssh google-compute-engine

我在使用ssh登录从自定义映像创建的VM时遇到问题。

我按照creating an image from an existing GCE instance的步骤进行了操作。

我已成功创建了图片,将其上传到Google云端存储并将其作为图片添加到我的项目中,但当我尝试连接到新图片时,我收到了“拒绝连接”。

我可以看到其他端口上运行的其他应用程序用于新映像,因此看起来只是受影响的ssh。

我所做的步骤如下:

...create an image from existing GCE instance (one I can log into fine via ssh)..then:

gcutil --project="river-ex-217" addimage example2 http://storage.googleapis.com/example-image/f41aca6887c339afb0.image.tar.gz
gcutil --project="river-ex-217" addinstance --image=example2 --machinetype=n1-standard-1 anothervm
gcutil --service_version="v1" --project="river-ex-217" ssh --zone="europe-west1-a" "anothervm"

哪个输出:

INFO: Running command line: ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/mark1/.ssh/google_compute_engine -A -p 22 mark1@23.251.133.2 --
ssh: connect to host 23.251.133.2 port 22: Connection refused

我已经尝试删除另一个SO答案中建议的sshKeys元数据,并重新连接这样做:

INFO: Updated project with new ssh key. It can take several minutes for the instance to pick up the key.
INFO: Waiting 120 seconds before attempting to connect.
INFO: Running command line: ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/mark1/.ssh/google_compute_engine -A -p 22 mark1@23.251.133.2 --
ssh: connect to host 23.251.133.2 port 22: Connection refused

然后我尝试在另一个区域中的第一个实例,它可以正常使用新密钥:

gcutil --service_version="v1" --project="river-ex-217" ssh --zone="europe-west1-b" "image1"

两个实例都在运行端口22的同一“默认”网络上运行,而ssh适用于创建映像的第一个实例。

我从其他实例和我的本地机器尝试了nc命令,它没有显示输出:

nc 23.251.133.2 22

...虽然原始VM的ip显示此输出:

nc 192.157.29.255 22
SSH-2.0-OpenSSH_6.0p1 Debian-4

我已经尝试重新制作图像并重新添加实例,没有区别。

我已经尝试登录到第一个实例,并将用户切换到该计算机上的一个(应该与第二台计算机相同?),并从那里切换到ssh。

WARNING: You don't have an ssh key for Google Compute Engine. Creating one now...
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
INFO: Updated project with new ssh key. It can take several minutes for the instance to pick up the key.
INFO: Waiting 300 seconds before attempting to connect.
INFO: Running command line: ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /home/mark/.ssh/google_compute_engine -A -p 22 mark@23.251.133.2 -- --zone=europe-west1-a
ssh: connect to host 23.251.133.2 port 22: Connection refused

我没有想法,任何帮助都非常感激:)令人抓狂的事情是我可以看到新的虚拟机已准备好应用程序,我只需要添加一些文件并设置一些cronjobs。我想我可以做这个预图像制作,但我希望能够在以后登录并修改它,而不需要花费1小时来创建图像并每次都启动新实例。

你的忠实, 标记

1 个答案:

答案 0 :(得分:4)

这个问题似乎是关于如何调试图像的SSH连接问题,所以这是我对此的回答。

您的实例可能无法正常运行SSH服务器。准备好的图像可能有些不对劲。

可能有用的调试问题要问自己:

  • 您是否使用gcimagebundle捆绑图片或手动完成?考虑使用该工具确保您没有错过任何内容。
  • 在捆绑图像之前,您是否更改了有关ssh服务器配置的任何内容?
  • 当实例启动时,检查它的控制台输出是否有ssh消息 - 它应该提到重新生成密钥,启动sshd守护程序并监听端口22.如果它没有或抱怨与ssh相关的东西,你应该跟进。

您已经涵盖了这些内容,但为了完整起见,还应检查这些内容:

  • 它可以在它出现后以其他方式到达VM吗?它是否响应Web服务器端口(如果有)或响应ping?
  • 仔细检查您的VM所在的网络是否允许从您连接的主机进行SSH(端口22)访问。

您可以将ssh设置与工作图像的设置进行比较:

  • 从您的图片中创建一个新磁盘(disk-mine-1)。
  • 从任何正在运行的启动映像创建一个新磁盘(disk-upstream-1),例如debian wheezy one。
  • 将这两者连接到您可以访问的VM(在控制台或cli上)。
  • SSH进入虚拟机。
  • 安装两个映像(sudo mkdir / mnt / {mine,upstream}&& sudo mount / dev / sdb1 / mnt / mine&& sudo mount / dev / sdc1 / mnt / upstream)。请注意,您的图像是sdb还是sdc取决于您附加图像的顺序!
  • 查找ssh配置(diff -waur / mnt / {mine,upstream} / etc / ssh)之间的差异。除非你特别需要,否则不应该有。
  • 同时检查您的图片是否具有正确的/mnt/mine/etc/init.d/{ssh,generate-ssh-hostkeys}脚本。它们也应该从/mnt/mine/etc/rc{S,2}.d链接(分别为S10generate-ssh-hostkeys和S02ssh)。