Saturday, September 17, 2011

linux下使用ssh tunnel来翻墙

~/sshautologin.html
首先在www.ssh4gfw.com注册帐号察看这个链接

然后使用的来的帐号密码可以建立ssh tunnel(ssh隧道)了,速度还可以而且是免费的.

ssh -v -CNgD 7070 username@server

其中:

    -v verbose,显示详细信息;
    -C Requests compression  of  all  data,压缩传输数据;
    -N Do  not  execute a remote command,不运行远程程序。即通知 sshd 不运行设定的 shell;
    -g Allows remote hosts to connect to local forwarded ports,允许远程主机链接本地端口;
    -D Specifies a local “dynamic” application-level port forwarding,建立tunnel,监听本地端口;

    ——–可选参数——–
    -q quiet,安静模式;
    -f Requests ssh to go to background just before command  execution, ssh在后台运行,即认证之后,ssh退居后台;
    -n Redirects stdin from /dev/null,将 stdio 重定向到 /dev/null,与-f配合使用

最简方案:(不推荐)
1
    ssh -D 7070 username@server

不论是 windows 还是 linux,只要 ssh 登录成功就可以进行下一步啦~

ssh自动输入密码登陆的方法:

1. 通过rsa密匙验证(配置家单,并且ssh,scp,sftp等登陆都面去了输入密码的麻烦)

    1,生成rsa的密匙.
    $ssh-keygen -t rsa

    2,将公匙存放到服务器上(注意存放目录位置)
    $scp ~/.ssh/id_rsa.pub username@server:~/.ssh/authorized_keys

    大功告成!通过ssh登陆,通过scp或者sftp传输文件啥的都不用再输入密码了!

2.安装sshpass

    1,安装sshpass
    Debian系的linux
    $sudo apt-get install sshpass
    Arch
    $sudo yaourt sshpass

    2,使用方法
    $sshpass -p password ssh username@server

    使用-p指定密码,还需要在后面跟上标准的ssh链接命令


我使用了上面的第2中方法,第1种方法还需要上传公匙,我发现我没法上传到ssh4gfw上

使用下面的命令就可以很简单的使用ssh代理了

$sshpass -p password ssh -v -CNgD 7070 username@ww.ssh4gfw.com

然后在firefox中把about:config中的network.proxy.socks_remote_dns设为true来防止dns污染

然后设置autoproxy(福)添加新代理,使用127.0.0.1,socks 5,端口7070就可以使用代理咯

ssh tunnel(ssh隧道)的原理的简单图式

Youtube/facebook/====ssh代理服务器====GFW=====user
                 80/443端口           22端口

ssh本来就是全程加密传输,所以在22端口传输的数据包裹上80端口的内容,就好像在打条隧道一样,很简单吧.这样就可以很容易的突破网络封锁了.

下面说说给ssh tunnel的帐号建立最小的权限
 1,在服务器新建立一个user
  # useradd -s /bin/false username
 2,设置密码
  # passwd username
 3,修改/etc/passwd文件:把用户的shell设置为/usr/bin/passwd
 4,把/usr/bin/passwd这一行写入/etc/shells
  # echo "/usr/bin/passwd" >> /etc/shells
使用/usr/bin/passwd作为用户的shell,这样用户就可以通过登陆自主修改密码,但是用户没有权限运行其他命令(sshd 认证通后之后,会检查设定的shell是否登记在/etc/shells文件中,若已经登记,则fork自己,然后fork出来的子进程再exec设定的shell).此时账号username可以通过sshd的认证使用TcpForwarding,但是不能运行shell,不能与系统交互.可以安全而快速的为用户提供ssh 代理.

No comments: