使用ssh端口转发做socks代理服务器

  • A+
所属分类:系统文档

使用ssh端口转发做socks代理服务器

1.1.  ssh自动输入密码登录服务器

1、采用“密钥验证”方法

生成密匙对,此处用的是rsa的密钥:

[[email protected] ~]# ssh-keygen -t rsa

#一路回车在当前用户的根目录下(此处根目录为:/root/.ssh/id_rsa)的.ssh目录生成id_rsa.pub公钥

 

将公钥放到服务器上(注意存放目录位置):

[[email protected] ~]# scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub  #将本地生成的公钥拷贝到远程服务器的下,其中webperformeradmSSH服务器的账号名,218.213.68.13SSH服务器的地址

[[email protected] ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将公钥追加到 authorized_keys 文件中

#这样通过ssh登录、通过scp或者sftp传输文件啥的都不用再输入密码了!很是方便!

或:自动脚本命令追加的方式:

[[email protected] ~]# cat ~/.ssh/id_rsa.pub | ssh [email protected] “cat – >> ~/.ssh/authorized_keys”

 

 

2、采用“sshpass”方法(前提是已安装sshpass

[[email protected] 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下的bashwindows下的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的一个内部命令,有点晕吧,expectshell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“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

 如何检查?

[[email protected] ~]# whereis tcl

tcl: /usr/lib/tcl8.4 /usr/share/tcl8.4

如果看不到结果,请先安装tcl,安装:

[[email protected] ~]# yum install expect

 

1.2.  使用ssh端口转发做socks代理

查看1080有没被其它端口占用:

[[email protected] ~]# 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  

 

若如上所示,可见端口被占用,结束进程:

[[email protected] ~]# kill -9 3435

 

创建ssh端口转发socks代理脚本文件ssh_proxy_hk.sh

[[email protected] ~]# vi ~/.ssh/ssh_proxy_hk.sh

在脚本文件ssh_proxy_hk.sh中加入以下内容:

ssh -CfNg -D 1080 [email protected] -p 22

其中1080为代理服务器的端口号,webperformeradmSSH服务器的账号名,218.213.68.13SSH服务器的地址,22SSH服务器的端口号

 

参数说明:

 

-C  压缩传送的数据

-f   ssh将在后台运行,这个选项很有用,没有shell的不可登陆账号也能使用.

-N  不执行脚本或命令,仅转发端口

-g  表示允许远程主机连接转发端口

-D  动态转发

-p  后接SSH的端口号,默认为22

 

系统启动后自动执行脚本文件ssh_proxy_hk.sh

[[email protected] ~]# vi /etc/rc.local

加入以下内容:

sh ~/.ssh/ssh_proxy_hk.sh

 

1.3.  iptables中设置允许指定的IP访问1080端口

备份iptables,开启某些IP访问端口:

[[email protected] ~]# cp /etc/sysconfig/iptables-config /etc/sysconfig/iptables-config_bak20120514

[[email protected] ~]# iptables -I INPUT -p tcp –dport 1080 -j DROP #关闭所有的1080端口

 

[[email protected] ~]# iptables -I INPUT -s 192.168.1.12 -p tcp –dport 1080 -j ACCEPT #开启ip192.168.1.1280

[[email protected] ~]# iptables -I INPUT -s 192.168.1.53 -p tcp –dport 1080 -j ACCEPT

[[email protected] ~]# iptables -I INPUT -s 192.168.1.73 -p tcp –dport 1080 -j ACCEPT

[[email protected] ~]# iptables -I INPUT -s 192.168.1.75 -p tcp –dport 1080 -j ACCEPT

[[email protected] ~]# iptables -I INPUT -s 192.168.1.73 -p tcp –dport 1080 -m connlimit –connlimit-above 5 -j REJECT #允许单个IP的最大连接数为 5

 

[[email protected] ~]# iptables -A INPUT -p tcp –dport 1080 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 –hitcount 10 -j REJECT

[[email protected] ~]# iptables -A INPUT -p tcp –dport 1080 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT

#单个IP60秒内只允许最多新建30个连接

 

[[email protected] ~]# iptables -I INPUT -s 192.168.111.0/24 -p tcp –dport 1080 -j ACCEPT #开启ip192.168.111.0/24端的80

 

以上是设置是临时,系统重启不会保存,所以需保存一下iptables

[[email protected] ~]# service iptables save

重启iptables

[[email protected] ~]# service iptables restart

查看iptables是否生效:

[[email protected] ~]# iptables -L –line-numbers

删除某条规则:

[[email protected] ~]# iptables -D INPUT 序号
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: