SSH的巨大价值体现在能够配置为代理服务器上。不像在Windows下每次还需要手动登录设置,Linux有很好的工具链能够实现自动设置SSH代理,就是expect和ssh的联合使用,再加上proxychains,任何程序都可以享用代理了,在此我简单介绍一下。
首先要安装expect和openssh,如果没有,Ubuntu下输入apt-get install expect openssh-client即可安装。接下来需要写一段脚本:
#!/usr/bin/expect set timeout 60 spawn /usr/bin/ssh -D 本地端口 -g 用户名@服务器 expect { "password:" { send "密码\r" } } interact { timeout 60 { send " "} } |
把上面的中文替换成对应内容,保存为一个脚本文件,例如sshproxy.sh,然后给它执行权限,chmod +x sshproxy.sh。在终端下运行./sshproxy.sh,就会发现自动登录到了服务器上,而且在本地建立了一个socks5代理。而且使用这段脚本还不用担心会被踢,因为每60秒都要发送一个空格表示还在活动。如果把sshproxy.sh放到自动启动,那么以后每次启动都可以自动建立代理了。
这种方法建立的代理是socks5代理,在浏览器中很容易配置使用,但如果其他程序也想用它,而没有代理功能,该怎么办呢?在Windows下面的确不好办(需要各种付费的、不稳定的代理转换工具),而在Linux下一切很简单,只需要一个名叫proxychains的工具。Ubuntu安装方法为apt-get install proxychains。安装完以后要设置/etc/proxychains.conf文件,删除[ProxyList]后面的内容,然后添加
socks5 127.0.0.1 端口 |
把“端口”替换为SSH代理设置的端口。然后在想要运行的程序前加上proxychains ,即可使用代理。例如输入proxychains wget http://www.youtube.com -r,即可给wget设置SSH代理去下载。
正如其名,实际上proxychains是个代理链,我们可以设置多个代理,实现多级跳板连接。用在SSH代理上实在是大才小用了。
挺好的代理配置教程,转载一下,谢谢!
[回复]
六月 16th, 2010 at 19:39:46
[...] Linux下实现自动设置SSH代理 Posted on 六月 16, 2010 by xijie 作者:BYVoid 来源:http://www.byvoid.com/blog/linux-ssh-wall/ [...]
密码不断修改的免费ssh帐号,还要手动输入密码到,脚本该怎么改呢?谢谢
[回复]
BYVoid 回复:
七月 21st, 2010 at 10:21:08
如果有權限的話,可以嘗試用密鑰驗證。
[回复]
不行啊,这个脚本似乎只能在终端下使用,一旦我用Alt+F2执行或者添加到GNOME的自启动项就无效(如果用ps -A查看会发现ssh过了一段时间后退出了),不知道如何解决,请问您是如何做的?
另外
expect {
“password:” {
send “密码\r”
}
这个password应该是Password
Linux区分大小写,搞了很长时间。
[回复]
BYVoid 回复:
七月 25th, 2010 at 19:08:08
你說的這些問題我這裏都沒有
[回复]
我不知道你的系统为何如此特殊,或者是我的linux太新了(archlinux)
这个程序也能在后台运行。
我查了些资料,官方的FAQ说明了interact只能在人机交互下使用,所以程序执行到这里就直接退出了。于是改成expect eof。
然后发现程序还是莫名其妙退出。仔细观察,发现大约是1min左右的时间,估计是timeout的问题。google了下,发现 timeout设成-1就可以了。
发一下代码:
#!/usr/bin/expect
set timeout -1
spawn /usr/bin/ssh -D 7070 -g username@IP
expect Password:
send “Password\r”
expect eof
[回复]
我没有遇到过空闲的SSH还会KICK的,于是这个目前很好用。
[回复]