shadowsocks.sh 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #!/bin/bash
  2. #
  3. # Author: yeho <lj2007331 AT gmail.com>
  4. # Blog: http://blog.linuxeye.com
  5. #
  6. # Install Shadowsocks(Python) Server
  7. # Check if user is root
  8. [ $(id -u) != "0" ] && { echo -e "\033[31mError: You must be root to run this script\033[0m"; exit 1; }
  9. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  10. clear
  11. printf "
  12. #######################################################################
  13. # OneinStack for CentOS/RadHat 6+ Debian 6+ and Ubuntu 12+ #
  14. # Install Shadowsocks(Python) Server #
  15. # For more information please visit http://oneinstack.com #
  16. #######################################################################
  17. "
  18. [ ! -d src ] && mkdir src
  19. cd src
  20. . ../options.conf
  21. . ../functions/download.sh
  22. . ../functions/check_os.sh
  23. Public_IP=`../functions/get_public_ip.py`
  24. if [ "$OS" == 'CentOS' ];then
  25. [ -z "$(grep -E ' 7\.| 6\.' /etc/redhat-release)" ] && { echo -e "\033[31mShadowsocks only support CentOS6,7 or Debian or Ubuntu! \033[0m"; exit 1; }
  26. fi
  27. Install_shadowsocks(){
  28. if [ "$OS" == 'CentOS' ]; then
  29. for Package in wget unzip openssl-devel gcc swig python python-devel python-setuptools autoconf libtool libevent automake make curl curl-devel zlib-devel perl perl-devel cpio expat-devel gettext-devel
  30. do
  31. yum -y install $Package
  32. done
  33. else
  34. apt-get -y update
  35. for Package in python-dev python-pip curl wget unzip gcc swig automake make perl cpio
  36. do
  37. apt-get -y install $Package
  38. done
  39. fi
  40. src_url=http://mirrors.linuxeye.com/lnmp/src/ez_setup.py && Download_src
  41. src_url=http://mirrors.linuxeye.com/lnmp/init/Shadowsocks-init && Download_src
  42. which pip > /dev/null 2>&1
  43. if [ $? -ne 0 ]; then
  44. OS_CentOS='python ez_setup.py install \n
  45. easy_install pip'
  46. OS_command
  47. fi
  48. if [ -f /usr/bin/pip ]; then
  49. pip install M2Crypto
  50. pip install greenlet
  51. pip install gevent
  52. pip install shadowsocks
  53. if [ -f /usr/bin/ssserver -o -f /usr/local/bin/ssserver ]; then
  54. /bin/cp Shadowsocks-init /etc/init.d/shadowsocks
  55. chmod +x /etc/init.d/shadowsocks
  56. OS_CentOS='chkconfig --add shadowsocks \n
  57. chkconfig shadowsocks on'
  58. OS_Debian_Ubuntu="update-rc.d shadowsocks defaults"
  59. OS_command
  60. [ ! -e /usr/bin/ssserver -a -e /usr/local/bin/ssserver ] && sed -i 's@Shadowsocks_bin=.*@Shadowsocks_bin=/usr/local/bin/ssserver@' /etc/init.d/shadowsocks
  61. else
  62. echo
  63. echo "Shadowsocks install failed! Please visit http://oneinstack.com"
  64. exit 1
  65. fi
  66. fi
  67. }
  68. Uninstall_shadowsocks(){
  69. while :
  70. do
  71. echo
  72. read -p "Do you want to uninstall Shadowsocks? [y/n]: " Shadowsocks_yn
  73. if [ "$Shadowsocks_yn" != 'y' -a "$Shadowsocks_yn" != 'n' ];then
  74. echo -e "\033[31minput error! Please only input 'y' or 'n'\033[0m"
  75. else
  76. break
  77. fi
  78. done
  79. if [ "$Shadowsocks_yn" == 'y' ]; then
  80. [ -n "`ps -ef | grep -v grep | grep -i "ssserver"`" ] && /etc/init.d/shadowsocks stop
  81. OS_CentOS='chkconfig --del shadowsocks'
  82. OS_Debian_Ubuntu="update-rc.d -f shadowsocks remove"
  83. OS_command
  84. /bin/rm -rf /etc/shadowsocks.json /var/run/shadowsocks.pid /etc/init.d/shadowsocks
  85. pip uninstall -y shadowsocks
  86. if [ $? -eq 0 ]; then
  87. echo -e "\033[32mShadowsocks uninstall success! \033[0m"
  88. else
  89. echo -e "\033[31mShadowsocks uninstall failed! \033[0m"
  90. fi
  91. else
  92. echo -e "\033[32mShadowsocks uninstall cancelled! \033[0m"
  93. fi
  94. }
  95. AddUser_shadowsocks(){
  96. while :
  97. do
  98. echo
  99. read -p "Please input password for shadowsocks: " Shadowsocks_password
  100. [ -n "`echo $Shadowsocks_password | grep '[+|&]'`" ] && { echo -e "\033[31minput error,not contain a plus sign (+) and & \033[0m"; continue; }
  101. (( ${#Shadowsocks_password} >= 5 )) && break || echo -e "\033[31mshadowsocks password least 5 characters! \033[0m"
  102. done
  103. }
  104. Iptables_set(){
  105. if [ -e '/etc/sysconfig/iptables' ];then
  106. Shadowsocks_Already_port=`grep -oE '90[0-9][0-9]' /etc/sysconfig/iptables | head -n 1`
  107. elif [ -e '/etc/iptables.up.rules' ];then
  108. Shadowsocks_Already_port=`grep -oE '90[0-9][0-9]' /etc/iptables.up.rules | head -n 1`
  109. fi
  110. if [ -n "$Shadowsocks_Already_port" ];then
  111. Shadowsocks_Default_port=`expr $Shadowsocks_Already_port + 1`
  112. else
  113. Shadowsocks_Default_port=9001
  114. fi
  115. while :
  116. do
  117. echo
  118. read -p "Please input Shadowsocks port(Default: $Shadowsocks_Default_port): " Shadowsocks_port
  119. [ -z "$Shadowsocks_port" ] && Shadowsocks_port=$Shadowsocks_Default_port
  120. if [ $Shadowsocks_port -ge 9001 >/dev/null 2>&1 -a $Shadowsocks_port -le 9099 >/dev/null 2>&1 ];then
  121. break
  122. else
  123. echo -e "\033[31minput error! Input range: 9001~9099\033[0m"
  124. fi
  125. done
  126. if [ -e '/etc/sysconfig/iptables' ];then
  127. if [ -z "`grep -E $Shadowsocks_port /etc/sysconfig/iptables`" ];then
  128. iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport $Shadowsocks_port -j ACCEPT
  129. fi
  130. elif [ -e '/etc/iptables.up.rules' ];then
  131. if [ -z "`grep -E $Shadowsocks_port /etc/iptables.up.rules`" ];then
  132. iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport $Shadowsocks_port -j ACCEPT
  133. fi
  134. else
  135. echo -e "\033[31mThis port is already in iptables\033[0m"
  136. fi
  137. OS_CentOS='service iptables save'
  138. OS_Debian_Ubuntu='iptables-save > /etc/iptables.up.rules'
  139. OS_command
  140. }
  141. Config_shadowsocks(){
  142. cat > /etc/shadowsocks.json<<EOF
  143. {
  144. "server":"0.0.0.0",
  145. "local_address":"127.0.0.1",
  146. "local_port":1080,
  147. "port_password":{
  148. "$Shadowsocks_port":"$Shadowsocks_password"
  149. },
  150. "timeout":300,
  151. "method":"aes-256-cfb",
  152. "fast_open":false
  153. }
  154. EOF
  155. }
  156. AddUser_Config_shadowsocks(){
  157. [ ! -e /etc/shadowsocks.json ] && { echo -e "\033[31mShadowsocks is not installed\033[0m"; exit 1; }
  158. [ -z "`grep \"$Shadowsocks_port\" /etc/shadowsocks.json`" ] && sed -i "s@\"port_password\":{@\"port_password\":{\n\t\"$Shadowsocks_port\":\"$Shadowsocks_password\",@" /etc/shadowsocks.json || { echo -e "\033[31mThis port is already in /etc/shadowsocks.json\033[0m"; exit 1; }
  159. }
  160. Print_User_shadowsocks(){
  161. echo
  162. echo -e "Your Server IP: \033[032m$Public_IP\033[0m"
  163. echo -e "Your Server Port: \033[032m$Shadowsocks_port\033[0m"
  164. echo -e "Your Password: \033[032m$Shadowsocks_password\033[0m"
  165. echo -e "Your Local IP: \033[032m127.0.0.1\033[0m"
  166. echo -e "Your Local Port: \033[032m1080\033[0m"
  167. echo -e "Your Encryption Method: \033[032maes-256-cfb\033[0m"
  168. }
  169. case "$1" in
  170. install)
  171. AddUser_shadowsocks
  172. Iptables_set
  173. Install_shadowsocks
  174. Config_shadowsocks
  175. service shadowsocks start
  176. Print_User_shadowsocks
  177. ;;
  178. adduser)
  179. AddUser_shadowsocks
  180. Iptables_set
  181. AddUser_Config_shadowsocks
  182. service shadowsocks restart
  183. Print_User_shadowsocks
  184. ;;
  185. uninstall)
  186. Uninstall_shadowsocks
  187. ;;
  188. *)
  189. echo
  190. echo -e $"\033[035mUsage:\033[0m \033[032m $0 {install|adduser|uninstall}\033[0m"
  191. echo
  192. exit 1
  193. esac