通过远程代理使用Github

echosoar 原创发表于 2019/11/24 20:58:29
#github代理 #ssh-copy-id #ssh代理
由于公司禁止在工作电脑上面写一些和工作无关的私人代码(公司觉得在工作电脑上写的代码所有权就是公司的),而我自己的笔记本之前让我送人了,于是我就搞了一台双核4G的阿里云ECS来远程写代码,同时让我的ipad也不再是用来看爱奇艺了。
今天上午在远程写代码的时候提交代码到github,发现被墙了,ping都一直是timeout,琢磨了一上午想了个方案:通过我的那台在芝加哥的服务器来进行代理,最开始想法很美好想通过shadowsocks,不过我的服务器是个无界面的centos,臣妾实在是做不到如何使用sock5协议连接远程服务器代理git请求,于是只能再想换一个方法。
突然记起来之前看到的ssh的ProxyCommand选项,机器A可以使用任意代理机制和机器B建立SSH连接,同时A上的ssh命令会同步到B机器上面去执行,相当于机器A上的SSH Client与机器B上的SSH Server建立了直接连接,也就等同于建立了一条直接代理通道。于是在我的阿里云服务器上面配置了一下:
// ~/.ssh/config 文件
Host github.com
    ProxyCommand  ssh root@remoteHostIP nc %h %p
这个时候又遇到了新的问题,代理里面的ssh连接每次都需要输入远程服务器的密码,想略过输入密码这一步,让每一次连接都变成自动的,于是使用ssh-copy-id将阿里云服务器上面生成的SSH公钥复制到芝加哥的那台服务器上面,然后每次代理都使用自己的私钥来连接,这样就不用输入密码了。
首先在阿里云的服务器上生成秘钥:
// 输入命令,然后一直回车,就能生成秘钥了
ssh-keygen
生成的秘钥有两个文件,一个是.pub后缀的公钥,也就是要把这个用ssh-copy-id拷贝到芝加哥的服务器上面:
ssh-copy-id -i .ssh/id_rsa_remote.pub root@remoteHostIP
在执行上面这个命令的时候,需要输入远程服务器的ssh登录密码,验证成功后就能把公钥传输过去了,等公钥传输过去了之后可以在本地来验证一下是否可以直连,这个时候要记得使用不带.pub后缀的私钥才可以:
ssh -i ~/.ssh/id_rsa_remote root@remoteHostIP
然后把 ~/.ssh/config 文件中的代理进行一些修改:
Host github.com
    ProxyCommand  ssh -i ~/.ssh/id_rsa_remote root@remoteHostIP nc %h %p
大功告成了,又可以愉快地远程写代码了。