Skip to content

Instantly share code, notes, and snippets.

@jorben
Created June 2, 2017 09:42
Show Gist options
  • Save jorben/8cb9bbd269111944e888c5ae959d6610 to your computer and use it in GitHub Desktop.
Save jorben/8cb9bbd269111944e888c5ae959d6610 to your computer and use it in GitHub Desktop.
SSH\SCP通过代理连接目标服务器

一、SSH over http

Corkscrew是专门为ssh提供http代理的软件,要使用corkscrew需要http代理支持HTTP CONNECT方法,建议使用squid或者ATS这类专业的代理软件,代理不建议设置认证

1.1 Corkscrew安装

下载:

wget http://agroman.net/corkscrew/corkscrew-2.0.tar.gz 编译安装:

./configure make && make install 1.2 配置

假设我的http代理是proxy.52os.net,端口是8080;ssh服务器是52os.net,ssh端口2882,格式:

ssh user@server -o "ProxyCommand corkscrew 代理地址 代理端口 ssh服务器地址 ssh端口 " 测试一下:

ssh -p2882 root@52os.net -o " ProxyCommand /usr/local/bin/corkscrew proxy.52os.net 8080 server.52os.net 2882 " 正常会弹出ssh输入密码的提示,这时的ssh就是通过http代理连接到服务器的。每次都这样连接比较麻烦,将配置写入ssh_config文件中,配置全局使用http代理:

编辑ssh客户端配置文件 /etc/ssh/ssh_config,加入:

Host * ProxyCommand corkscrew proxy.52os.net 8080 %h %p %h表示目标地址,%p是目标端口。这样配置后,用ssh user@host连接服务器就会通过http代理中转。 非全局配置,可以指定具体的ip:

Host 52os #别名,可以不设置 Hostname server.52os.net #域名或者ip User root Port 2862 #IdentityFile 证书路径 ProxyCommand corkscrew proxy.52os.net 8080 %h %p 使用下面命令连接即可:

ssh 52os 如果ssh配置无密码证书登录,是不是有种ssh跳板机的感觉?

二、ssh over socks corkscrew不支持socks代理,如果是socks代理要使用nc,或者其它支持socks的软件,配置和上面类似:

ProxyCommand nc -X 5 -x socks5.52os.net:1080 %h %p nc非常强大,我的http代理支持CONNECT方法,即能打开https的网站,也可以用nc代替corkscrew:

ProxyCommand nc -X connect -x proxy.52os.net:8080 %h %p 个人更喜欢用nc,因为各发行版的包管理中都有,使用起比方便。proxycommand 命令相当的灵活,不只是http和socks代理,如果有其它形式的代理,只要有客户端支持都可以用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment