On this page... (hide)

  1.   1.  客户端用法
  2.   2.  服务器端维护
  3.   3.  隧道辅助工具

用“ssh -D”指令能方便地创建一个 socket 代理,作为网络隧道来使用。而且这个链路是通过 SSL 协议加密保护的,有一定的防御能力。

这个办法在 Linux 服务器维护上经常使用,可以利用这个“隧道”来访问服务器上的一些本地服务。(曾经这个办法被用来翻墙,不过随着长城的进步,这个翻墙办法现在会导致服务器 ip 地址快速被墙。)

1.  客户端用法

建立Tunnel: $ ssh -v -N -g -C -D 18080 username@host_ip 输入密码即可使用(也可以用key认证)。

  • Windows的话,可以使用 plink.exe 或者 MyEnTunnel(MyEnTunnel 本质上也是使用 plink.exe 来建立Tunnel)。

2.  服务器端维护

限制“ssh -D”专用帐号权限的一个简单办法是——禁止用户登录(这样 ssh 只能连接到 sshd 但是不执行远程命令,因此需要使用 -N 参数)。

  1. 在服务器上建一个 username : $ useradd -s /bin/false username 将用户的 shell 设置成 /bin/false ,这样用户就无法与系统进行交互。
  2. 设置密码: $ passwd username
  3. 补充一下:对已有帐号禁止其shell交互使用: $ usermod -s /bin/false username
    • 小技巧:也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码。需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells 文件。 sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则 fork自己,然后 fork 出来的子进程再 exec 设定的 shell 。而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell。

3.  隧道辅助工具

有很多 ssh 自动管理工具处理自动输入登陆密码、断线重连等问题,简化代理使用。

  • 命令行管理脚本推荐我用 python 实现的 solidssh 或者 用 C 语言实现的 autossh
  • 也有很多图形界面的 ssh 隧道管理工具,可以搜索关键词“SSH Tunnel Manager”找到,比如“gSTM(Gnome SSH Tunnel Manager) ”等等。
    • Mac OS X 下,建议使用 GoAgentX ,这个东西除了对 GoAgent 的支持外,也提供靠谱的 ssh 管理。
    • Windows 推荐使用 Bitvise SSH Client ,配置好能用的 profile 之后,可以把快捷方式放在“启动”里头让它自动启动,并且可以在快捷方式里写参数指定自动调用哪个 profile 。
    • 更全面的参考“各平台创建 SSH Tunnel 的免费客户端”。
GlossyBlue theme adapted by David Gilbert
Powered by PmWiki