SSH via Proxy

公司只能通过 http proxy 上网,Solaris 里面自带的 ssh-http-proxy-connect 命令不管用,想到 dreamhost 提供的 shell 中摆弄几下总也不成功。今天 google 到一个东西可以说是最好的解决办法:goto-san-connect 1.96,比以前发现的http tunnel方便多了。

源码:http://zippo.taiyo.co.jp/~gotoh/ssh/connect.c

编译方法源码里就有。

用于 openssh 时在 ~/.ssh/config 里用 ProxyCommand 命令,例如:

Host joyus
User fakename Hostname joyus.org
ProxyCommand connect -4 -H proxyserver:port %h %p

更多信息:

Using OpenSSH through a SOCKS compatible PROXY on your LANhttp://zippo.taiyo.co.jp/~gotoh/ssh/openssh-socks.html
Detailed usagehttp://zippo.taiyo.co.jp/~gotoh/ssh/connect.html

打包下载:http://joyus.org/pub/goto-san-connect-1.96.tar.gz

GNU screen实在是太帅了!

在单位电脑上用 screen 启动要长时间运行的程序,回到家 VPN 登到机器上后,screen -d -r 恢复,哈哈,终端就切换到我这里来了,看看日志,没啥问题,再 detach 让它接着运行,明天去公司再切换回去看,虚拟的终端太棒了。简单记一下基本用法:

$ screen -t “ssh-host1″ ssh host1 参数 -t 指定一个 title,便于标示多个窗口时

C-a : 打开命令输入,类似 VIM 的冒号模式

在冒号提示符后面可以启动新任务:screen ssh -t “host2″ console.sh host2

C-a c 直接开个新 shell

$ vim somefile 在新 shell 中启动新任务,这样任务都在一个会话(session)中

C-a C-d 断开(detach)当前会话,进程仍在后台执行,即使退出最外面的 shell,只要不断网不关机,session 都会在那

other-term $ screen -ls 列出所有的 session,这个例子中只有一个

other-term $ screen -r 恢复这个 session

other-term $ screen -d -r 如果其他终端 attach 到了这个 session,先断开它,再从本终端恢复

C-a S 开个新窗口,注意是大写 S,小写 s 是发送 C-S,终端会停止滚屏的哦(C-a C-q 恢复)

C-a TAB 切换到新窗口

C-a 1 在当前窗口中打开编号为 1 的任务

C-a C-n 下一个任务

C-a C-p 上一个任务

C-a C-a 循环切换任务

C-a ? 列出帮助信息,记住这个就不怕了

所有命令默认都是 C-a 开始,在 bash 中本来这个键本来是跳到行首的,没了这个功能可不太爽,定制的方法是在 ~/.screenrc 中指定,例如指定为后引号 `:

escape ``

这样所有命令都变为 ` 开始,要输入 ` 本身,则要按它两次。

再如始终显示状态条,包括窗口 ID 号和名字等信息

hardstatus string '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<'

screen 主页:http://www.gnu.org/software/screen/

一个不错的介绍:http://gentoo-wiki.com/TIP_Using_screen

在只允许 proxy http 外出的环境中使用 ssh/telnet

公司内部只能通过 http 代理进行外出访问,FTP 下载、Gaim 这种本身支持代理的东西虽然没有问题,但要想 ssh 或者 telnet 登陆外面的服务器就不好办了。Google 到了httptunnel,可以建立 HTTP 隧道跑任何 TCP 应用,支持 proxy,它由客户端 htc 和服务端 hts 两个程序组成,安装很简单:

wget http://ftp.gnu.org/gnu/httptunnel/httptunnel-3.3.tar.gz
tar xzvf ../tarball/httptunnel-3.3.tar.gz
cd httptunnel-3.3/
./configure
make

这就得到了 hts 和 htc,可以 make install 装到 /usr/local/bin,或者直接把 hts htc 复制到要的位置就好了。

假设要从内网 10.1.1.1 登陆外面的 234.5.6.7,在两台机器上分别装好 httptunnel,10.1.1.1 上要运行 htc,234.5.6.7 上要运行 hts(最初只好在能登陆的环境中操作啦),代理服务器为 222.188.125.66:3128,原理如下:

10.1.1.1                    222.188.125.66       234.5.6.7
.------------------------. .-----------------. .-----------------------.
| [ssh client] | | [proxy :3128] | | [sshd] |
| | | | / | | ^ |
| | | | / | | | |
| `----> [htc :2222] -+--+->--' `-->--+--+-> [hts :4433] ---' |
`------------------------' `-----------------' `-----------------------'

在 234.5.6.7 上运行 hts:

hts -F localhost:22 -S 4433

在 10.1.1.1 上运行 htc 然后就可以 ssh 从本机穿过隧道:

htc -S -F 2222 234.5.6.7:4433 -P 222.188.125.66:3128
ssh -v localhost -p 4433 -l username

Cool!

 1

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天