- A+
使用ssh端口转发做socks代理服务器
1.1. ssh自动输入密码登录服务器
1、采用“密钥验证”方法
生成密匙对,此处用的是rsa的密钥:
[root@os11728 ~]# ssh-keygen -t rsa
#一路回车在当前用户的根目录下(此处根目录为:/root/.ssh/id_rsa)的.ssh目录生成id_rsa.pub公钥 |
将公钥放到服务器上(注意存放目录位置):
[root@os11728 ~]# scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub #将本地生成的公钥拷贝到远程服务器的下,其中webperformeradm为SSH服务器的账号名,218.213.68.13为SSH服务器的地址
[root@os11728 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将公钥追加到 authorized_keys 文件中 #这样通过ssh登录、通过scp或者sftp传输文件啥的都不用再输入密码了!很是方便! |
或:自动脚本命令追加的方式:
[root@os11728 ~]# cat ~/.ssh/id_rsa.pub | ssh [email protected] “cat – >> ~/.ssh/authorized_keys” |
2、采用“sshpass”方法(前提是已安装sshpass)
[root@os11728 sshpass-1.05]# /usr/local/sshpass/bin/sshpass -p ‘你的密码‘ ssh 用户名@服务器ip地址 |
1、 采用“expect”方法(前提是已安装expect)
例一:
#!/usr/bin/expect
spawn /usr/bin/ssh用户名@服务器ip地址 expect “*password:” send “你的密码\r” expect “*]#” send “cd /root” expect “*]#” send “exit\r” expect eof
|
例二:
##############################################
#!/usr/bin/expect set timeout 30 spawn ssh -l username 192.168.1.1 expect “password:” send “ispass\r” interact ############################################## |
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用“which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect “password:”]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send “ispass\r”]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示:命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
#!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下
# Change a login shell to bash
set user [lindex $argv 0]
spawn bash $user
expect “]:”
send “/bin/bash ”
expect eof
exit
安装expect
备注:因为expect是基于tcl的,所以需要你的系统中安装有tcl
如何检查?
[root@os11728 ~]# whereis tcl
tcl: /usr/lib/tcl8.4 /usr/share/tcl8.4
如果看不到结果,请先安装tcl,安装:
[root@os11728 ~]# yum install expect
1.2. 使用ssh端口转发做socks代理
查看1080有没被其它端口占用:
[root@os11728 ~]# netstat -apn|grep 1080
tcp 0 0 :::1080 :::* LISTEN 3435/ssh tcp 0 0 ::ffff:192.168.1.230:1080 ::ffff:192.168.1.12:55049 ESTABLISHED 3435/ssh |
若如上所示,可见端口被占用,结束进程:
[root@os11728 ~]# kill -9 3435 |
创建ssh端口转发socks代理脚本文件ssh_proxy_hk.sh:
[root@os11728 ~]# vi ~/.ssh/ssh_proxy_hk.sh |
在脚本文件ssh_proxy_hk.sh中加入以下内容:
ssh -CfNg -D 1080 [email protected] -p 22 |
其中1080为代理服务器的端口号,webperformeradm为SSH服务器的账号名,218.213.68.13为SSH服务器的地址,22为SSH服务器的端口号
参数说明:
-C 压缩传送的数据
-f ssh将在后台运行,这个选项很有用,没有shell的不可登陆账号也能使用.
-N 不执行脚本或命令,仅转发端口
-g 表示允许远程主机连接转发端口
-D 动态转发
-p 后接SSH的端口号,默认为22
系统启动后自动执行脚本文件ssh_proxy_hk.sh:
[root@os11728 ~]# vi /etc/rc.local |
加入以下内容:
sh ~/.ssh/ssh_proxy_hk.sh |
1.3. 在iptables中设置允许指定的IP访问1080端口
备份iptables,开启某些IP访问端口:
[root@os11728 ~]# cp /etc/sysconfig/iptables-config /etc/sysconfig/iptables-config_bak20120514
[root@os11728 ~]# iptables -I INPUT -p tcp –dport 1080 -j DROP #关闭所有的1080端口
[root@os11728 ~]# iptables -I INPUT -s 192.168.1.12 -p tcp –dport 1080 -j ACCEPT #开启ip为192.168.1.12的80口 [root@os11728 ~]# iptables -I INPUT -s 192.168.1.53 -p tcp –dport 1080 -j ACCEPT [root@os11728 ~]# iptables -I INPUT -s 192.168.1.73 -p tcp –dport 1080 -j ACCEPT [root@os11728 ~]# iptables -I INPUT -s 192.168.1.75 -p tcp –dport 1080 -j ACCEPT [root@os11728 ~]# iptables -I INPUT -s 192.168.1.73 -p tcp –dport 1080 -m connlimit –connlimit-above 5 -j REJECT #允许单个IP的最大连接数为 5
[root@os11728 ~]# iptables -A INPUT -p tcp –dport 1080 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 –hitcount 10 -j REJECT [root@os11728 ~]# iptables -A INPUT -p tcp –dport 1080 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT #单个IP在60秒内只允许最多新建30个连接
[root@os11728 ~]# iptables -I INPUT -s 192.168.111.0/24 -p tcp –dport 1080 -j ACCEPT #开启ip段192.168.111.0/24端的80口
|
以上是设置是临时,系统重启不会保存,所以需保存一下iptables:
[root@os11728 ~]# service iptables save |
重启iptables:
[root@os11728 ~]# service iptables restart |
查看iptables是否生效:
[root@os11728 ~]# iptables -L –line-numbers |
删除某条规则:
[root@os11728 ~]# iptables -D INPUT 序号 |
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫