雕虫小技:ssh端口转发

公司的防火墙只定义了80,8080等http端口,比较另类的如9091就过不去了,这种问题用端口转发就能解决:

ssh -N -L 9091:200.200.200.200:9091 myssh.host.name

200.200.200.200:9091是要访问的远程主机和端口
9091是要映射的本地端口
myssh.host.name是要使用端口转发的ssh服务器
-N,表示本连接不执行任何命令
-L,表示设置端口转发
-v,加上这个选项可以察看详细的连接信息

还有一种情况是我在家里想访问办公室的电脑,因为电脑在防火墙后面,所以不可能直接访问,但可以把我本地的ssh端口映射到myssh.host.name的某个端口上,这样我在家也能访问公司电脑了,这里要用-R选项

ssh -N -R 2222:127.0.0.1:22 myssh.host.name

2222是映射到外网的端口
127.0.0.1:22表示2222要映射到本地的22端口

PTY allocation request failed on channel 0

Archlinux 真是不能做服务器,升一次级就要死一次,你们三天两头倒腾包的布局/命名有啥意思呢?

这次OpenVZ的用户倒了大霉,升级 udev 以后,ssh 进不去,提示:PTY allocation request failed on channel 0。

这下傻眼了,ssh 进不去这不完了蛋了,修都没法修。

Google 了一下,有个大叔已经研究出了怎么修复,用 `ssh user@dongsheng.org ‘/bin/bash -i’` 进去,重新挂载 /dev/pts 即可,但这个办法治标不治本,系统重启就又回到原点。在 /etc/rc.d 里放个脚本就行了:

rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts

文件名存为 /etc/rc.d/udevfix,然后在 /etc/rc.conf 的 DEAMON 中加入 udevfix 即可。

据悉,这个问题是由于 OpenVZ 的模板与 udev 不兼容导致的。

升级 Archlinux 要谨慎啊!!

Credits:
http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/
http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048

使用 SSH Tunnel 翻墙 SSH/MyEnTunnel/Putty

回国一个月,受尽了 GFW 的折磨,装了个 Gladder 聊以度日,但限制也很多,比如担心自己的隐私安全,下载不方便,速度缓慢等等,更坏的消息是澳洲也要开始搞网络过滤了,所以得未雨绸缪设置一个 SSH Tunnel。

在虚拟主机端的配置

刚买的 Hostmonster 虚拟主机就派上了用场,默认情况下 SSH Access 是不开启的,于是跟在线客服联系,让他开通 SSH 支持,并把护照复印件或其它有效证件发给他,然后 SSH 就激活了。

在 Hostmonster 的 cPanel 中导入自己的公钥,到本地电脑把私钥存在 ~/.ssh/id_rsa 中,就可以实现无密码登录了。

对于一般的 sshd 公钥登陆配置是在 /etc/ssh/sshd_config 中添加

AuthorizedKeysFile %h/.ssh/authorized_keys

然后在 ~/.ssh/authorized_keys 中添加公钥,Hostmonster 是自动处理了。

本地设置

本地要做两件事,建立 SSH Tunnel 通道和设置浏览器使用 SOCKS v5 代理。

Windows 系统

如果是用 putty,用如下命令即可建立 ssh tunnel:

plink -N -D 8080 -l dongsheng -pw thepassword -v dongsheng.org

然后在火狐或者 IE 中设置 SOCKS v5 代理为 127.0.0.1:8080。

Windows 上最简单的办法是使用 MyEnTunnel,直接在图形界面中添上 ssh 服务器地址,用户名密码,然后点连接就轻松创建了 ssh tunnel。

对于 Firefox 来说有不少很棒的代理扩展,我觉得最棒的是 AutoProxy,它维护了一个黑名单列表(对GFW来说是黑名单),只有在列表里的网站才会使用代理访问,一般的网站都是直接访问。

还要有注意的一点是在 Firefox 的 about:config 里要把 network.proxy.socks_remote_dns 设置为 true,不然会遭遇 DNS 劫持。

Linux

在终端里输入:

ssh -N -D 8080 -l dongsheng dongsheng.org
# -v 可以输出更多连接信息
#ssh -N -v -D 8080 -l dongsheng dongsheng.org

这就建立了一个本地 SOCKS v5 代理,在火狐中设置 SOCKS v5 类代理为 127.0.0.1:8080 就可以使用了。

  • -N 是禁止执行远程命令
  • -v 是输出调试信息,用于测试结果
  • -D 设置转发端口
  • -l 是自己的登录名

补充:

  • 在远程主机上运行一个命令并退出:
    plink -l root -pw thepassword -v dongsheng.org "/etc/rc.d/fastcgi restart"