SSH via HTTP Proxy

这是一个困扰我许久的问题,因为自己比较懒所以一直没有去就寻根问底,需要用到 SSH Tunnel 时就用 PuTTY 来绕过这个问题。

问题的产生:公司的网络环境需要走 HTTP Proxy 才能访问外部 Internet 。工作机用 Ubuntu ,无论是在终端 SHELL 中手动设置 http_proxy 还是用 gnome-network-properties GUI 设置全局环境变量,对在命令行中用 ssh 都不起作用。

解决方法: Debian / Ubuntu 下可以安装 connect-proxy 包,Arch Linux 上需要从 AUR 安装 connect 这个包。

以下是包描述:

Description: Establish TCP connection using SOCKS4/5 or HTTP tunnel connect-proxy is a simple relaying command to make tunnel TCP connection via SOCKS or HTTPS proxies. It is mainly intended to be used as proxy command of OpenSSH.

安装后编辑一下 ~/.ssh/config 给需要的主机或 IP 地址段配置代理,例如:

1
2
3
4
# Digital Ocean
Host 192.241.*.*
ProxyCommand connect -H proxy.company.com:80 %h %p
ServerAliveInterval 30

参考: Gist

保存,再试一下 ssh 到 tux.im 搞定!

更多 connect-proxy 的用法请 RTFM ;-)

注意:这样的话也带来了另外一个问题,若切换到家中或其它不需要代理的环境,就会出现连不上 tux.im 的情况。至于如何解决,大家自行动脑筋吧;-)

还是那句话:世上无难事,只怕有心人。

注意: tux.im 并非本人所有,只是被用来举例。