最容易的代理,SSH隧道加密代理和转发

一提到代理第一个想到的是squid,其实啊,有更加方便的方法 .

我使用linux,常常要用远程的服务器来打开一些东西.对方只要有ssh服务,就能做代理,非常方便. 方法很容易,

在终端窗口输入:

1
2
ssh -qTfnN -D 1394 用户名@远程ssh主机
ssh -qTfnN -D1394 remotehost

 

参数详解:
-D 1080 建立动态Tunnel,监听在本地1080端口.
-q  安静模式.
-T  不分配 TTY ,只做代理用
-f   将 ssh 转到后台运行,即认证之后,ssh 自动以后台运行.不会显示出来.
-n  将 stdio 重定向到 /dev/null,与-f配合使用.
-N  不运行远程程序.即通知 sshd 不运行设定的 shell.

这其实就使用的 SSH 的远程转发的功能
例子,在实验室里有一台 LDAP 服务器(LdapServerHost),但是限制了只有本机上部署的应用才能直接连接此 LDAP 服务器.如果我们由于调试或者测试的需要想临时从远程机器(LdapClientHost)直接连接到这个 LDAP 服务器 , 有什么方法能够实现呢?

答案无疑是本地端口转发了,它的命令格式是:

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

在 LdapClientHost 上执行如下命令即可建立一个 SSH 的本地端口转发,例如:

$ ssh -L 7001:localhost:389 LdapServerHost

 

 

SSH 技巧:
也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码.需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells文件.
sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则fork自己,然后fork出来的子进程再exec 设定的 shell .而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell.


分享到: 微信 更多