任务描述:
使用shell脚本登录远程服务器,并执行命令:添加反向代理站点。Windows用户的方法见文末。
示例代码的功能:
登录远程linux服务器并在上边执行命令后返回当前linux主机,执行的命令为“在远程服务器上执行一个添加反向代理站点的命令”。添加站点需要知道域名,所以这个脚本有一个参数,这个参数就是域名。
示例代码的用法:
raps.sh xxxxx.com
raps.sh代码:
#!/usr/bin/expect # 名称:Remote Add Proxy Site,^_^ # 说明:自动登上远程服务器后添加反向代理站点(配置内置) # 注意:需要传递一个域名参数,脚本中的proxySiteAdd是远程服务器上的添加站点工具 # 用法:raps xxxx.com # 2012-11-02 08:55:21 # 配置 set user upall set passwd upall@remote set server 158.164.198.210 set port 2222 set dn [lindex $argv 0] # 登录并执行命令 spawn ssh $user@$server -p $port expect "password:" send "${passwd}\n" expect "]# " send "proxySiteAdd ${dn}\n" expect "]# " exit
补充:
1、“expect “]# “”用于接收终端输出,如果输出中有“]# ”标志就往下继续执行命令;send 用于在远程服务器上执行命令。
2、传递参数时不能直接使用“$1”、“$2”,“set dn [lindex $argv 0]”会把第0个参数赋值给$dn,若是“set dn [lindex $argv 2]”会把第3个参数赋值给$dn。
远程服务器上的 proxySiteAdd 代码:
#!/bin/bash HTTPD_CONF="/etc/httpd/conf/vhosts.conf" # 生成apache虚拟主机配置文件(反向代理) echo "<VirtualHost *:80>">> $HTTPD_CONF echo " ServerName www.$1">> $HTTPD_CONF echo " ServerAlias $1">> $HTTPD_CONF echo " ProxyRequests Off">> $HTTPD_CONF echo " <Proxy *>">> $HTTPD_CONF echo " Order deny,allow">> $HTTPD_CONF echo " Allow from all">> $HTTPD_CONF echo " </Proxy>">> $HTTPD_CONF echo " ProxyPass / http://$1.demo.upall.cn/">> $HTTPD_CONF echo " ProxyPassReverse / http://$1.demo.upall.cn/">> $HTTPD_CONF echo "</VirtualHost>">> $HTTPD_CONF echo "CONF: "$HTTPD_CONF #### 下边的代码是跳转用的,如果不想使用反向代理可以用下边的代码取代上边的 # 生成apache虚拟主机配置文件(跳转) #echo "<VirtualHost *:80>">> $HTTPD_CONF #echo " ServerName www.$1">> $HTTPD_CONF #echo " ServerAlias $1">> $HTTPD_CONF #echo " Redirect / http://$1.demo.upall.cn/">> $HTTPD_CONF #echo "</VirtualHost>">> $HTTPD_CONF
Windows用户的解决办法
可以使用plink.exe实现这个功能,示例:
plink -pw yourPassword root@123.123.123.123 -P 23 doSomething.sh