多个Linux发行版安装ss服务端
本文仅做技术探讨,请在遵守相应的法律法规的前提下使用。
Centos 7一键安装脚本
简单快捷,随机生成密码,默认端口默认加密类型
bash <(curl -s http://morning.work/examples/2015-12/install-shadowsocks.sh) firewall-cmd --zone=public --add-port=/tcp --permanent firewall-cmd --reload
可以这么控制
# 开启服务 systemctl enable shadowsocks systemctl start shadowsocks # 检查状态 systemctl status shadowsocks -l
脚本内容比较简单,通过二进制文件安装了一个pip,如果已有pip或者对脚本内pip来源不信任可以手动安装,并注释掉安装pip的代码
端口,加密类型由自己需要更改
#!/bin/bash # Install Shadowsocks on CentOS echo "Installing Shadowsocks..." random-string() { :-} | } CONFIG_FILE=/etc/shadowsocks.json SERVICE_FILE=/etc/systemd/system/shadowsocks.service SS_PASSWORD=$(random-) SS_PORT= SS_METHOD=aes--cfb SS_IP=`ip route get | awk '{print $NF;exit}'` GET_PIP_FILE=/tmp/get-pip.py # install pip curl "https://bootstrap.pypa.io/get-pip.py" -o "${GET_PIP_FILE}" python ${GET_PIP_FILE} # install shadowsocks pip install --upgrade pip pip install shadowsocks # create shadowsocls config cat <<EOF | sudo tee ${CONFIG_FILE} { "server": "0.0.0.0", "server_port": ${SS_PORT}, "password": "${SS_PASSWORD}", "method": "${SS_METHOD}" } EOF # create service cat <<EOF | sudo tee ${SERVICE_FILE} [Unit] Description=Shadowsocks [Service] TimeoutStartSec= ExecStart=/usr/bin/ssserver -c ${CONFIG_FILE} [Install] WantedBy=multi-user.target EOF # start service systemctl enable shadowsocks systemctl start shadowsocks # view service status systemctl status shadowsocks -l echo "================================" echo "" echo "Congratulations! Shadowsocks has been installed on your system." echo "You shadowsocks connection info:" echo "--------------------------------" echo "server: ${SS_IP}" echo "server_port: ${SS_PORT}" echo "password: ${SS_PASSWORD}" echo "method: ${SS_METHOD}" echo "--------------------------------"
CentOS 6+, Debian 7+, Ubuntu 12+
据作者介绍这个脚本可以用在多个发行版上,同样是python原版,需要手动输入一些配置,会依据发行版自动配置防火墙
bash <(curl -s https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh)
以下是脚本具体内容,像我这种经常换服务器的人并不喜欢这种需要配置的脚本,没怎么看
#!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH #=================================================================# # System Required: CentOS +, Debian +, Ubuntu + # # Description: One click Install Shadowsocks-Python server # # Author: Teddysun <i@teddysun.com> # # Thanks: @clowwindy <https://twitter.com/clowwindy> # # Intro: https://teddysun.com/342.html # #=================================================================# clear echo echo "#############################################################" echo "# One click Install Shadowsocks-Python server #" echo "# Intro: https://teddysun.com/342.html #" echo "# Author: Teddysun <i@teddysun.com> #" echo "# Github: https://github.com/shadowsocks/shadowsocks #" echo "#############################################################" echo libsodium_file="libsodium-1.0.16" libsodium_url="https://github.com/jedisct1/libsodium/releases/download/1.0.16/libsodium-1.0.16.tar.gz" # Current folder cur_dir=`pwd` # Stream Ciphers ciphers=( aes--gcm aes--gcm aes--gcm aes--ctr aes--ctr aes--ctr aes--cfb aes--cfb aes--cfb camellia--cfb camellia--cfb camellia--cfb chacha20-ietf-poly1305 chacha20-ietf chacha20 rc4-md5 ) # Color red='\033[0;31m' green='\033[0;32m' yellow='\033[0;33m' plain='\033[0m' # Make sure only root can run our script [[ $EUID -ne ]] && # Disable selinux disable_selinux(){ if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce fi } #Check system check_sys(){ local checkType=$ local value=$ local release='' local systemPackage='' if [[ -f /etc/redhat-release ]]; then release="centos" systemPackage="yum" elif cat /etc/issue | grep -Eqi "debian"; then release="debian" systemPackage="apt" elif cat /etc/issue | grep -Eqi "ubuntu"; then release="ubuntu" systemPackage="apt" elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then release="centos" systemPackage="yum" elif cat /proc/version | grep -Eqi "debian"; then release="debian" systemPackage="apt" elif cat /proc/version | grep -Eqi "ubuntu"; then release="ubuntu" systemPackage="apt" elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then release="centos" systemPackage="yum" fi if [[ ${checkType} == "sysRelease" ]]; then if [ "$value" == "$release" ]; then return else return fi elif [[ ${checkType} == "packageManager" ]]; then if [ "$value" == "$systemPackage" ]; then return else return fi fi } # Get version getversion(){ if [[ -s /etc/redhat-release ]]; then grep -oE "[0-9.]+" /etc/redhat-release else grep -oE "[0-9.]+" /etc/issue fi } # CentOS version centosversion(){ if check_sys sysRelease centos; then local code=$ local version="$(getversion)" local main_ver=${version%%.*} if [ "$main_ver" == "$code" ]; then return else return fi else return fi } # Get public IP address get_ip(){ local IP=$( ip addr | ) [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com ) [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip ) [ ! -z ${IP} ] && echo ${IP} || echo } get_char(){ SAVEDSTTY=`stty -g` stty -echo stty cbreak count= > /dev/null stty -raw stty echo stty $SAVEDSTTY } # Pre-installation settings pre_install(){ if check_sys packageManager yum || check_sys packageManager apt; then # Not support CentOS ; then echo -e "$[{red}Error${plain}] Not supported CentOS 5, please change to CentOS 6+/Debian 7+/Ubuntu 12+ and try again." exit fi else echo -e "[${red}Error${plain}] Your OS is not supported. please change OS to CentOS/Debian/Ubuntu and try again." exit fi # Set shadowsocks config password echo "Please enter password for shadowsocks-python" read -p "(Default password: teddysun.com):" shadowsockspwd [ -z "${shadowsockspwd}" ] && shadowsockspwd="teddysun.com" echo echo "---------------------------" echo "password = ${shadowsockspwd}" echo "---------------------------" echo # Set shadowsocks config port while true do dport=$(shuf -i - -n ) echo "Please enter a port for shadowsocks-python [1-65535]" read -p "(Default port: ${dport}):" shadowsocksport [ -z "$shadowsocksport" ] && shadowsocksport=${dport} &>/dev/null ]; then ] && [ ${shadowsocksport} -le ] && [ ${shadowsocksport::} != ]; then echo echo "---------------------------" echo "port = ${shadowsocksport}" echo "---------------------------" echo break fi fi echo -e "[${red}Error${plain}] Please enter a correct number [1-65535]" done # Set shadowsocks config stream ciphers while true do echo -e "Please select stream cipher for shadowsocks-python:" ;i<=${#ciphers[@]};i++ )); do hint="${ciphers[$i-1]}" echo -e "${green}${i}${plain}) ${hint}" done read -p "Which cipher you'd select(Default: ${ciphers[0]}):" pick [ -z &>/dev/null ]; then echo -e "[${red}Error${plain}] Please enter a number" continue fi || "$pick" -gt ${#ciphers[@]} ]]; then echo -e "[${red}Error${plain}] Please enter a number between 1 and ${#ciphers[@]}" continue fi shadowsockscipher=${ciphers[$pick-]} echo echo "---------------------------" echo "cipher = ${shadowsockscipher}" echo "---------------------------" echo break done echo echo "Press any key to start...or Press Ctrl+C to cancel" char=`get_char` # Install necessary dependencies if check_sys packageManager yum; then yum install -y python python-devel python-setuptools openssl openssl-devel curl wget unzip gcc automake autoconf make libtool elif check_sys packageManager apt; then apt-get -y update apt-get -y install python python-dev python-setuptools openssl libssl-dev curl wget unzip gcc automake autoconf make libtool fi cd ${cur_dir} } # Download files download_files(){ # Download libsodium file if ! wget --no-check-certificate -O ${libsodium_file}.tar.gz ${libsodium_url}; then echo -e "[${red}Error${plain}] Failed to download ${libsodium_file}.tar.gz!" exit fi # Download Shadowsocks file if ! wget --no-check-certificate -O shadowsocks-master.zip https://github.com/shadowsocks/shadowsocks/archive/master.zip; then echo -e "[${red}Error${plain}] Failed to download shadowsocks python file!" exit fi # Download Shadowsocks init script if check_sys packageManager yum; then if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks -O /etc/init.d/shadowsocks; then echo -e "[${red}Error${plain}] Failed to download shadowsocks chkconfig file!" exit fi elif check_sys packageManager apt; then if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-debian -O /etc/init.d/shadowsocks; then echo -e "[${red}Error${plain}] Failed to download shadowsocks chkconfig file!" exit fi fi } # Config shadowsocks config_shadowsocks(){ cat > /etc/shadowsocks.json<<-EOF { "server":"0.0.0.0", "server_port":${shadowsocksport}, "local_address":"127.0.0.1", , "password":"${shadowsockspwd}", , "method":"${shadowsockscipher}", "fast_open":false } EOF } # Firewall set firewall_set(){ echo -e "[${green}Info${plain}] firewall set start..." ; then /etc/init.d/iptables status > /dev/>& ]; then iptables -L -n | >& ]; then iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT /etc/init.d/iptables save /etc/init.d/iptables restart else echo -e "[${green}Info${plain}] port ${shadowsocksport} has already been set up." fi else echo -e "[${yellow}Warning${plain}] iptables looks like shutdown or not installed, please manually set it if necessary." fi ; then systemctl status firewalld > /dev/>& ]; then firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp firewall-cmd --reload else echo -e "[${yellow}Warning${plain}] firewalld looks like not running or not installed, please enable port ${shadowsocksport} manually if necessary." fi fi echo -e "[${green}Info${plain}] firewall set completed..." } # Install Shadowsocks install(){ # Install libsodium if [ ! -f /usr/lib/libsodium.a ]; then cd ${cur_dir} tar zxf ${libsodium_file}.tar.gz cd ${libsodium_file} ./configure --prefix=/usr && make && make install ]; then echo -e "[${red}Error${plain}] libsodium install failed!" install_cleanup exit fi fi ldconfig # Install Shadowsocks cd ${cur_dir} unzip -q shadowsocks-master.zip ];then echo -e "[${red}Error${plain}] unzip shadowsocks-master.zip failed! please check unzip command." install_cleanup exit fi cd ${cur_dir}/shadowsocks-master python setup.py install --record /usr/local/shadowsocks_install.log if [ -f /usr/bin/ssserver ] || [ -f /usr/local/bin/ssserver ]; then chmod +x /etc/init.d/shadowsocks if check_sys packageManager yum; then chkconfig --add shadowsocks chkconfig shadowsocks on elif check_sys packageManager apt; then update-rc.d -f shadowsocks defaults fi /etc/init.d/shadowsocks start else echo echo -e "[${red}Error${plain}] Shadowsocks install failed! please visit https://teddysun.com/342.html and contact." install_cleanup exit fi clear echo echo -e "Congratulations, Shadowsocks-python server install completed!" echo -e "Your Server IP : \033[41;37m $(get_ip) \033[0m" echo -e "Your Server Port : \033[41;37m ${shadowsocksport} \033[0m" echo -e "Your Password : \033[41;37m ${shadowsockspwd} \033[0m" echo -e "Your Encryption Method: \033[41;37m ${shadowsockscipher} \033[0m" echo echo "Welcome to visit:https://teddysun.com/342.html" echo "Enjoy it!" echo } # Install cleanup install_cleanup(){ cd ${cur_dir} rm -rf shadowsocks-master.zip shadowsocks-master ${libsodium_file}.tar.gz ${libsodium_file} } # Uninstall Shadowsocks uninstall_shadowsocks(){ printf "Are you sure uninstall Shadowsocks? (y/n) " printf "\n" read -p "(Default: n):" answer [ -z ${answer} ] && answer="n" if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then >& ]; then /etc/init.d/shadowsocks stop fi if check_sys packageManager yum; then chkconfig --del shadowsocks elif check_sys packageManager apt; then update-rc.d -f shadowsocks remove fi # delete config file rm -f /etc/shadowsocks.json rm -f /var/run/shadowsocks.pid rm -f /etc/init.d/shadowsocks rm -f /var/log/shadowsocks.log if [ -f /usr/local/shadowsocks_install.log ]; then cat /usr/local/shadowsocks_install.log | xargs rm -rf fi echo "Shadowsocks uninstall success!" else echo echo "uninstall cancelled, nothing to do..." echo fi } # Install Shadowsocks-python install_shadowsocks(){ disable_selinux pre_install download_files config_shadowsocks if check_sys packageManager yum; then firewall_set fi install install_cleanup } # Initialization step action=$ [ -z $ ] && action=install case "$action" in install|uninstall) ${action}_shadowsocks ;; *) echo "Arguments error! [${action}]" echo "Usage: `basename $0` [install|uninstall]" ;; esac
手动方法
各个发行版的安装方法大同小异,先说python原版
首先你得有个pip
#Debian / Ubuntu下: apt-get install python-pip pip install shadowsocks #CentOS下: yum install python-setuptools && easy_install pip pip install shadowsocks #手动安装 curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python get-pip.py
通过pip安装ss
sudo pip install shadowsocks
出错的可以手动下载
#此页面下载 https://pypi.python.org/pypi/shadowsocks #解压安装 .tar.gz python setup.py install
使用
#前台运行 ssserver -p -k password -m aes--cfb #如果要后台运行: -k password -m aes--cfb --user nobody -d start #如果要停止: sudo ssserver -d stop #如果要检查日志: sudo less /var/log/shadowsocks.log #通过脚本运行 sudo ssserver -c /etc/shadowsocks.json -d start #脚本这么写 { "server": "0.0.0.0", , "password": "password", "method": "aes-256-cfb" }
然后就是设置防火墙
firewall-cmd --zone=public --add-port=/tcp --permanent firewall-cmd --zone=public --add-port=/udp --permanent firewall-cmd --reload #或者是 iptables -I INPUT -p tcp -m tcp --dport -j ACCEPT iptables -I INPUT -p udp -m tcp --dport -j ACCEPT service iptables save service iptables restart
libev版大同小异,大部分发行版已经有libev,直接安装就可以
客户端,可以用screen后台运行
ss-local -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法
或者写json
ss-local -c /etc/shadowsocks-libev/config.json
{ "server":"remote-shadowsocks-server-ip-addr", , "local_address":"127.0.0.1", , "password":"your-passwd", , "method":"aes-256-cfb", "fast_open":false, }
写到上边的默认配置后可以不加参数直接ss-local,另外刚安装号后systemctl看一下ss的服务端是否运行,stop并disable掉
enjoy it
多个Linux发行版安装ss服务端的更多相关文章
- 常见的LINUX发行版安装libiconv库方法
今天编译程序,发现程序报错,如下 cannot find -liconv collect2: ld returned 1 exit status 或者 undefined reference to ` ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 在Windows服务器安装ss服务端用于逃脱公司行为管理
1.安装:python-2.7.14.amd64.msi 2.配置环境变量 3.Win64OpenSSL-1_0_2n.exe 4.安装ss服务端:pip install **adowsocks 5. ...
- 安装基于 Linux 发行版的重要事项(流程指引)
安装基于 Linux 发行版的重要事项(Install important issues based on the Linux distribution. (Process guidance)) 1. ...
- Linux 桌面玩家指南:11. 在同一个硬盘上安装多个 Linux 发行版以及为 Linux 安装 Nvidia 显卡驱动
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- SLAM+语音机器人DIY系列:(一)Linux基础——2.安装Linux发行版ubuntu系统
摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...
- 在各种Linux发行版上安装Git的教程
Git是一个流行的开源版本控制系统(VCS),最初是为Linux环境开发的.跟CVS或者SVN这些版本控制系统不同的是,Git的版本控制被认为是“分布式的”,某种意义上,git的本地工作目录可以作为一 ...
- 如何在一个 U 盘上安装多个 Linux 发行版
作者: Ambarish Kumar 译者: LCTT geekpi 本教程介绍如何在一个 U 盘上安装多个 Linux 发行版.这样,你可以在单个 U 盘上享受多个现场版live Linux 发行版 ...
- 【Linux相识相知】计算机的组成、linux发行版和哲学思想、基础命令和目录结构(FHS)
从今天开始,Frank将开始在博客上记录自己学习linux的点点滴滴,F初来乍到,还望各位大佬多多指教.本次博客的主要内容如下: 计算机基础:简要的描述了计算机的组成及其功能: linux初识:介绍了 ...
随机推荐
- asp.net前台页面与后台之间传值,
在前台用 js 获取到的 “值 ”需要传到后台,在后台调用, ****** 原有传入的 “值 ” 不要被覆盖 1.最简单的在页面写一个隐藏表单,隐藏标签,把获取到的值赋给隐藏标签之后 ...
- 在UWP中实现自己的MVVM设计模式
其实写这篇博文的时候我是拒绝的,因为这牵扯到一个高大上的东西——"框架".一说起这个东西,很多朋友就感觉有点蒙了,尤其是编程新手.因为它不像在代码里面定义一个变量那么显而易见,它是 ...
- jsp使用servlet实现用户登录 及动态验证码
在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...
- 本地navicate for mysql怎么修改密码?
1.以前在本地设置sql库密码,就是在本地新建数据库的时候就输入,怎么也链接不上,原来是新建数据库的时候不能输入密码,需要在内部修改. 2. 打开mysql user表 3. 打开mysql user ...
- blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...
- Linux高可靠技术
1.进程挂死时,有后台监控程序检测重新拉起. 2.进程占用系统资源超过ulimit限定的资源时,会被ulimit杀死,同时配合后台监控程序,重新拉起进程,实现进程可靠性. 3.Linux系统的高可靠性 ...
- Linux常用系统命令
致歉:各位看到此博客的朋友们 因为命令的数量挺多的很多命令也都很简单 我就总结了一下具体的命令和这个命令是做什么的,主要的使用方法是链接到http://man.linuxde.net/的网站的,请各 ...
- JMeter 集合点设置之Synchronizing Timer的使用
集合点设置之Synchronizing Timer的使用 by:授客 QQ:1033553122 1.布局设置 注: 1) 说明: 名称:自定义名称 Number of Simulated Users ...
- 《数据库系统概念》1-数据抽象、模型及SQL
DBMS(database-management system)包括数据库和用于存取数据的程序,DBMS的基本目标是为数据的存取提供方便.高效的方式,此外对大多数企业来说,数据是非常重要的,所以DB ...
- Android 打开文件或文件夹777权限
打开777权限 public class SystemManager extends Activity { public static boolean RootCommand(String comma ...