分类: LINUX
2008-12-21 19:26:57
反向链接:从外网通过指定的端口用SSH登陆到局域网内。
工作原理
我们把具有固定ip地址的服务器219.238.162.158作为通道,在192.168.1.253上使用逆向ssh连接219.238.162.253的8821端口,到本地的的22端口(sshd)逆向连接成功后,219.238.162.158会启动一个进程监听端口指定的端口(8821),所有到这个端口的连接会被重定向到192.168.1.253的22端口上。
配置步骤:
环境要求:sd或wla平台
所需软件:cpssd_4_0_0_dev_2008_05_23_pageperf.zip jdk-1_5_0_06-linux-i586.bin
安装:
1 创建用户chengh
useradd chengh ;passwd ********
2 安装sd
[chengh@tserver link]$chmod +x link/jdk-1_5_0_06-linux-i586.bin
[chengh@tserver link]$./jdk-1_5_0_06-linux-i586.bin
[chengh@tserver link]$unzip link/cpssd_4_0_0_dev_2008_05_23_pageperf.zip
建立软链接
[chengh@tserver link]$ln -s cpssd cpssd_4_0_1_dev_2008_08_18 cps_home
[chengh@tserver link]$ln -s jdk jdk1.5.0_06 java_home
配置环境变量
[chengh@tserver link]$cd cps_home/conf
[chengh@tserver link]$vi bash_profile.txt
修改java_home,cps_home的路径并复制所有内容,如下:
export JAVA_HOME=/mnt/data1/chengh/link/java_home
export CPS_HOME=/mnt/data1/chengh/link/cps_home
export
PATH=$JAVA_HOME/bin:$CPS_HOME/bin:$CPS_HOME/bin/tools:$PATH:/bin:/sbin:/usr/bin:/usr/local/bin
:/usr/sbin:/usr/X11R6/bin:.
export LANG=zh_CN.GBK
alias psg="ps -ef --width 500 |grep"
alias cps="cd $CPS_HOME"
[chengh@tserver link]$cd
[chengh@tserver ~]$ls -a
chengh@tserver ~]$vi .bash_profile
修改成如下内容:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export JAVA_HOME=/mnt/data1/chengh/link/java_home
export CPS_HOME=/mnt/data1/chengh/link/cps_home
export
PATH=$JAVA_HOME/bin:$CPS_HOME/bin:$CPS_HOME/bin/tools:$PATH:/bin:/sbin:/usr/bin:/usr/local/bin
:/usr/sbin:/usr/X11R6/bin:.
export LANG=zh_CN.GBK
alias psg="ps -ef --width 500 |grep"
alias cps="cd $CPS_HOME"
使环境变量生效
[chengh@tserver ~]$source .bash_profile #source .bash_profile
修改sd文件属性及权限
[chengh@tserver ~]$cd link/cps_home
[chengh@tserver cps_home]$dos2unix ./run_me_first.sh
[chengh@tserver cps_home]$chmod +x ./run_me_first.sh
[chengh@tserver cps_home]$./run_me_first.sh
验证java和sd
[chengh@tserver ~]$java 如果显示java相关的参数则说明java配置正确。
[chengh@tserver ~]$cpswork checkdb 显示BUILD SUCCESSFUL 说明正确。
更改site_id,位于cps_home/conf/cps_server.xml
[chengh@tserver link]$cd cps_home/conf
[chengh@tserver conf]$vi cps_server.xml
把site_id改为site_id="chenghlink"保存退出。
生成密钥:
[chengh@tserver~]$ssh-keygen -t rsa
此时会在.ssh/生成两个文件id_rsa,id_rsa.pub。
[chengh@tserver~]$vi .ssh/id_rsa.pub 复制里面的内容
登陆到219.238.162.158,并su - ln2下
在/var/www/cps/cps_hack_list.html最后一行添加: chenglink:219.238.162.158:8821:ln2
[ln2@mail~]$cd /var/www/cps
[ln2@mail cps]$vi cps_hack_list.html
[ln2@mail~]$cd
[ln2@mail .ssh]$cd .ssh
[ln2@mail .ssh]$vi authoriaed_keys
把刚才复制的内容粘贴到最后(不能有空格和换行)
/*确认cps_home/conf/cps_server.xml里的siteId和/var/www/cps/ssh_hack_list.html里的siteId一致*/
测试连接:
登录到192.168.1.253
[chengh@tserver~]$ssh ln2@219.238.162.158
能否连通,提示符变为[ln2@mail ~]$ 说明连通。
登录:192.168.1.253
发起连接:
[chengh@tserver~]$cps_ssh_link
登录:219.238.162.158
监听:
[ln2@mail~]$netstat -pa |grep 8821
持续连接:
切换到192.168.1.253下
[chengh@tserver~]$cd link/cps_home/bin/skel
[chengh@tserver skel]$ vi cps_recoverall.cron
将最后一行注释掉或添加$CPS_HOME/bin/cps_ssh_link >> $LOGFILE 2>&1
这样系统会随着cps recover的配置,定期监测逆向连接,并在需要的时候启动或者关闭
[chengh@tserver skel]$cd ../../conf
[chengh@tserver conf]$vi crontab.txt 复制里面的内容
[chengh@tserver~]$crontab -e 将复制的内容粘贴过来,并将路径修改正确。修改后的内容如下:
#cps_restart_all.cron,每天定期重启SD系统
01 8 * * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_restart_all.cron
#cps_report.cron,每天定期发送邮件
32 08 * * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_report.cron
#cps_recoverall.cron,每几分钟监控一下系统是否僵死
*/5 * * * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_recoverall.cron
#cps_report_creator.cron,自动生成报表
23 7,13,21 * * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_report_creator.cron
#cps_merge_table_creator.cron,merge表每月滚动
0 0 1 * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_merge_table_creator.cron
#cps_jiance.cron 排名上传
0 * * * * /mnt/data1/chengh/link/cps_home/bin/skel/cps_jiance.cron
最后在219.238.162.158上看能否成功登录到192.168.1.253
[ln2@mail~]$ssh -p 8821 chengh@192.168.1.253
完成以上的步骤,反向链接基本就建立成功了。
注://黄色表示在192.168.1.253下输入的命令
//绿色表示在219.238.162.158下输入的命令
工作日志和cps_recoveral.cron使用的相同,$CPS_HOME/logs/cps_recover.cron 修改vi /etc/hosts 把vlocal_
Vi$CPS_HOME/bin/cps_ssh_link,SUPPORT_URL=一行后面加上?$SITE_ID,可以方便在日志里看到反向的连接情况。
如何关闭客户系统上的逆向连接
在上修改/var/www/cps/ssh_hack_list.html,把客户系统对应的行注释掉
配置好了之后,过了一段时间无法在通过管理服务器访问了这种情况一般是客户系统的异常导致逆向连接中断,但是客户系统上的进程还存在,定期运行的.
cps_ssh_hack没有发现错误处理方法是:
在管理服务器上中止监听那个端口的sshd进程(su到root用户,用netstat -pa|grep 端口号),如果存在的话,先kill掉。 修改ssh_hack_list.html,注释掉对应的行,等几分钟,让客户系统上的连接进程被kill掉。(可以通过tail文件/etc/httpd/logs/access_log.×××来监控) 恢复ssh_hack_list.html里面的配置,等几分钟,直到逆向连接再次被建立(通过管理服务器上看指定的端口是否有新的sshd监听) 如果出现Host key verification failed提示,需要删除/当前用户/.ssh/known_hosts 这个文件,然后重试。