Visual Studio Code SSH 连接 Google Cloud Shell

0

Google Cloud Shell是Google Cloud的一个Shell环境,默认集成了很多开发环境和Google Cloud SDK可以方便的管理云资源,它本身是一台 Docker 虚拟机,$HOME有5G永久磁盘,但是要求必须在120天内访问过,否则就会清空。其他目录的修改断开连接一小时后就会重置,空间不足的问题可以通过 gcsfuse my-bucket ~/my-bucket 映射Cloud Storage到本地。

支持网页预览,网页登录后访问 https://ssh.cloud.google.com/devshell/proxy?port=8080会指向Cloud Shell的8080端口,端口切换需要在网页端设置。

启用增强模式后在24小时内会提高主机性能,但每周有60小时使用时限,Cloud Shell的定位就是一台远程开发机,不能24小时运行,如果需要更强的性能可以尝试自定义环境

说Cloud Shell是Google为开发人员发放的福利也不为过。

         _,met$$$$$gg.      
      ,g$$$$$$$$$$$$$$$P.        OS: Debian 9.9 stretch
    ,g$$P""       """Y$$.".      Kernel: x86_64 Linux 4.19.44+
   ,$$P'              `$$$.      Uptime: 8h 49m
  ',$$P       ,ggs.     `$$b:    Packages: 590
  `d$$'     ,$P"'   .    $$$     Shell: bash 4.4.12
   $$P      d$'     ,    $$P     Disk: 31G / 45G (68%)
   $$:      $$.   -    ,d$$'     CPU: Intel Xeon @ 2.2GHz
   $$\;      Y$b._   _,d$P'      RAM: 856MiB / 3697MiB
   Y$$.    `.`"Y$$$$P"'         
   `$$b      "-.__              
    `Y$$                        
     `Y$$.                      
       `$$b.                    
         `Y$$b.                 
            `"Y$b._             
                `""""

但是目前使用Cloud Shell只能在网页端,ALPHA SDK中提供的SSH访问方式,我本地测试没有成功唤起PuTTy,这样以来就感觉Cloud Shell离我们的距离有些远,要是能集成到Visual Studio Code那该多好,经过一番折腾后总算是能顺畅使用了,把结果分享在这里,也做个记录。


安装 gcloud 命令行工具

首先需要为Google Cloud Shell设置SSH key,操作需要alpha版本的SDK。

gcloud components install alpha
gcloud components install beta
gcloud components update

升级完成后运行命令

gcloud alpha cloud-shell ssh --dry-run

该命令会检查本地证书,如果不存在会创建新的证书。

下载 CloudShell

下载工具包 https://github.com/ixiumu/google-cloud-shell-cli-go/releases/,解压文件,另外本地需要有Python环境。

在命令行下运行cloudshell info第一次执行会弹出Google登录验证,并缓存授权文件user_credentials.json到程序目录,接着运行cloudshell ssh就可以连接到 Google Cloud Shell 了。

使用Visual Studio Code Remote SSH连接

打开VS Code配置文件设置文件路径。

{
    "remote.SSH.path": "C:/cloudshell_with_vscode_win64/vscode_ssh.cmd"
}

编辑ssh配置文件%UserProfile%\.ssh\config添加cloudshell主机

Host cloudshell
    HostName 127.0.0.1

这里的IP是随便填写的,因为我们使用vscode_ssh.cmd代替了系统ssh,作为一个前置路由,如果是普通的SSH主机调用系统ssh.exe,如果主机名为cloudshell,唤则起cloudshell.exe连接 Google Cloud Shell。

“路由”文件内容,仅为展示原理,vscode_ssh.cmd文件已经包含在 Releases 中。

@echo off
cd  %~dp0
if "%1"=="" (
    type %UserProfile%\.ssh\config | find /i "host "
    exit /b
)
set vscode_host="%3"
set port="%2"
if "%vscode_host:cloudshell=%"=="%vscode_host%" (
    ssh %*
) else (
    taskkill /IM cloudshell.exe >nul 2>&1
    cloudshell.exe ssh -D %port%
)

使用代理

Cloud Shell 返回的 IP段还不错,但是Goole的IP一向是重灾区,可能需要配置代理才可以连接。

可以配置%UserProfile%\.ssh\config

Host *.cloudshell.dev
    ConnectionAttempts 5
    ControlMaster no
    ControlPath none
    LogLevel quiet
    PasswordAuthentication no
    ServerAliveInterval 30
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    IdentitiesOnly yes
    IdentityFile ~/.ssh/google_compute_engine
    LocalForward 127.0.0.1:8080 127.0.0.1:8080
    LocalForward 127.0.0.1:8443 127.0.0.1:8443
    ProxyCommand C:\Program Files\Git\mingw64\bin\connect.exe -S router:1080 %h %p

添加端口映射与代理,也可以修改cmd文件,添加代理参数

cloudshell.exe ssh -D %port% -o ProxyCommand="C:\Program Files\Git\mingw64\bin\connect.exe -S 127.0.0.1:1080 %%h %%p"

目前Visual Studio Code适配仅做了Windows端,其他系统兼容暂时没有准备动手,有兴趣的朋友欢迎提交 Pull requests 。

发表评论

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 必填字段 *

为何看不到我发布的评论?

正在提交, 请稍候...