第一个wehssh软件没有实现实验目的,第二个实现了。
第一次听说webssh,这是朋友刚进公司时他们头让他做的,我在网上查了下配置webssh的资料,这一方面的文档还真是少,现在整理在下面。
首先说明下需求:前端有一台web服务器,后端有一台linux服务器,现在要使用浏览器访问前端的web服务器来用ssh登录到后端linux机器上。
[root@localhost webssh]$ wget http://web-shell.googlecode.com/files/WebShell-0.9.6.zip
[root@localhost webssh]$ unzip WebShell-0.9.6.zip
[root@localhost webssh]$ cd WebShell-0.9.6
[root@localhost WebShell-0.9.6]$ ./make_certificate.sh
[tanxi@localhost WebShell-0.9.6]$ ./webshell.py --ssl-disable &
这时,你可以在浏览器上输入localhost:8022,就能使用webssh了。但是我们想通过80端口进入使用ssh服务怎么办呢?那么,现在就需要配置反向代理了。
在apache的配置文件http.conf中添加:
ProxyPass /webshell/ http://localhost:8022/
ProxyPassReverse /webshell/ http://localhost:8022/
这是启用apache的反向代理功能,如果你的apache没有加载相应的模块是不能用的,必须先要加载相应的模块
[root@localhost proxy]$ pwd
/usr/local/src/httpd-2.2.20/modules/proxy
[root@localhost proxy]$ /usr/local/apache2/bin/apxs -c -i -a mod_proxy.c mod_proxy_http.c mod_proxy_connect.c mod_proxy_ftp.c proxy_util.c
说明:-i 安装, -c 编译指定模块 -a激活模块
注意:这里mod_proxy.c和proxy_util.c两个模块要一起加载,不然等会儿启动apache时会报下面的错误:
[root@localhost modules]$ /etc/apachectl restart
httpd: Syntax error on line 102 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_proxy.so into server: /usr/local/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers
好了,现在可以直接访问http://10.229.11.22/webshell了,可是我发现返回过来的页面与访问http://127.0.0.1:8022不一样。
现在使用nginx做反向代理,配置文件给出一部分
[root@localhost conf]# vim nginx.conf
server {
listen 80;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8022;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
然后访问http://10.229.11.22,这次页面返回正确了,但是输入登录信息后发现网页反映超慢,完全用不了,不知道是怎么回事。
现在换一个软件来做webssh,这次用的是Anyterm。首先去网站下载Anyterm,网站是http://anyterm.org,可以用svn也可以直接下载,这里推荐用svn。
[root@localhost~]$ svn co http://svn.anyterm.org/anyterm/tags/releases/1.1/1.1.29/ anyterm-1.1.29 anyterm-1.1.29
[root@localhost~]$ cd anyterm-1.1.29
[root@localhost anyterm-1.1.29]$ cp 1.1.29/ /home/tanxi/ -r
[root@localhost anyterm-1.1.29]$ su - tanxi
[tanxi@localhost~]$ cd 1.1.29
[tanxi@localhost anyterm-1.1.29]$ cd 1.1.29/
[tanxi@localhost 1.1.29]$ ls
anytermd.1 build common.mk libpbe LICENSE README src
browser CHANGELOG contrib libpbe.mk Makefile scripts
在make之前,你得先明白一件事,Anyterm使用了一些boost c++的库函数,不过在make的时候你只需要它的头文件就行了,推荐使用1.34.1以上版本boost。下载网站:www.boost.org,我使用的是1.48.0版本。由于我们只需要boost的头文件,所以我们把下载的boost_1_48_0.tar.gz文件解压,然后把boost文件夹复制到/usr/include/下(gcc会在这个目录下寻找库文件)
注意:不要使用root编译安装,使用其他账户,这里用tanxi
[root@localhost ~]$ tar zxvf boost_1_48_0.tar.gz
[root@localhost ~]$ cd boost_1_48_0
[root@localhost boost_1_48_0]$ ls
boost boost.css bootstrap.sh index.html libs rst.css
boost-build.jam boost.png doc INSTALL LICENSE_1_0.txt status
boostcpp.jam bootstrap.bat index.htm Jamtanxi more tools
[root@localhost boost_1_48_0]$ cp -r boost /usr/include/
现在可以开始安装软件了,1.1.29版本的Anyterm只需要make就行了,不用再make install
[tanxi@localhost 1.1.29]$ make
make的时候报错:
(.text._ZN3pbe15atomic_post_decIiEET_RVS1_S1_[int pbe::atomic_post_dec<int>(int volatile&, int)]+0x14): undefined reference to '__sync_fetch_and_sub_4'
collect2: ld returned 1 exit status
make[1]: *** [anytermd] Error 1
make[1]: Leaving directory '/home/ngim/anyterm-1.1.29/build
make: *** [anytermd] Error 2
出现这个错误是因为编译的时候产生的代码是给老式的cpu机器使用的,而现在libgcc不支持它,所以更改编译信息
[tanxi@localhost 1.1.29]$ vim common.mk
GCC_FLAGS=-pthread改为GCC_FLAGS=-pthread -march=i686
然后把刚才的编译产生的.o文件删除
[tanxi@localhost 1.1.29]$ cd build/
[tanxi@localhost build]$ rm -f *.o
[tanxi@localhost 1.1.29]$ make
编译安装完成后启动服务
[tanxi@localhost 1.1.29]$ ./anytermd -p 7777 --local-only
Address already in use while bind()
现在可以访问http://localhost:7777
我们用apache做反向代理,这样能加强安全性。配置apache的反向代理步骤前面有
[tanxi@localhost conf]$ pwd
/usr/local/apache2/conf
[tanxi@localhost conf]$ vim httpd.conf
ProxyPass /webssh http://127.0.0.1:7777
ProxyPassReverse /webssh http://127.0.0.1:7777
现在可以访问http://ip/webssh