diff --git a/ssr_linux b/ssr_linux new file mode 100644 index 0000000..3916da0 --- /dev/null +++ b/ssr_linux @@ -0,0 +1,178 @@ +#!/bin/bash +# 作者:老徐 +# SSR免费分享网站(所有帐号均来源于网上别人的分享):http://ss.pythonic.life +# 源代码主页:https://github.com/the0demiurge +# 访问https://github.com/the0demiurge/CharlesScripts/blob/master/charles/bin/ssr获取本脚本的最新版 +# 使用方法:把该脚本放到$PATH里面并加入可执行权限就行(比如说放到/usr/local/bin) +# 首次使用输入ssr install后安装时会自动安装到 $HOME/.local/share/shadowsocksr +# 输入ssr config进行配置,输入JSON格式的配置文件 +# 输入ssr uninstall卸载 +# 输入ssr help 展示帮助信息 + +set -e +if [ -z "$EDITOR" ]; then + EDITOR=vi +fi + +WEBSITE=http://ss.pythonic.life +BRANCH=manyuser +GIT_REPO=https://github.com/shadowsocksrr/shadowsocksr.git +INSTALL_PATH=$HOME/.local/share/shadowsocksr + +ssr_help() { + echo ShadowSocksR python client tool + echo -e if you have not installed ssr, run \`ssr install\` first + echo Usage: + echo -e "\t" "ssr help" + echo -e "\n" "Install/Uninstall" + echo -e "\t" "ssr install install shadowsocksr client" + echo -e "\t" "ssr uninstall uninstall shadowsocksr client" + echo -e "\n" "Config and Subscribe" + echo -e "\t" "ssr update update subscription from $WEBSITE" + echo -e "\t" "ssr config edit config.json" + echo -e "\t" "ssr xclip paste configs from clipboard to config.json" + echo -e "\n" "Start/Stop/Restart" + echo -e "\t" "ssr start start the shadowsocks service" + echo -e "\t" "ssr stop stop the shadowsocks service" + echo -e "\t" "ssr restart restart the shadowsocks service" + echo -e "\n" "Testing and Maintenance" + echo -e "\t" "ssr test get ip from cip.cc using socks5 proxy" + echo -e "\t" "ssr log cat the log of shadowsocks" + echo -e "\t" "ssr shell cd into ssr installation dir" + echo -e "\t" "ssr clean clean ssr configuration backups" +} + +ssr_install() { + git clone -b $BRANCH $GIT_REPO $INSTALL_PATH + echo -e "Install finished!\nYou can visit my website $WEBSITE to acquire free ssr configs" +} + +ssr_uninstall() { + echo "Danger! are you to remove $INSTALL_PATH forever?(y/N)" + read doit + if [ $doit == 'y' ]; then rm -rvf $INSTALL_PATH; fi +} + +ssr_test() { + echo Testing Connection... + if [[ ! -z $(which jq 2>/dev/null) ]]; then + echo 'jq in use' + PORT=$(jq .local_port $INSTALL_PATH/config.json) + else + PORT=$(sed -r 's/\/\/.*$|\s+//g' $INSTALL_PATH/config.json | grep -oP '(?/dev/null) ]]; then + echo "You may install proxychains4 and configure it properly to test net delay" + else + echo -e '\nChecking delay...' + proxychains4 ping -c 5 cip.cc + fi + fi +} + +ssr_start() { + cd $INSTALL_PATH/shadowsocks/ + python local.py -d start --pid-file=$INSTALL_PATH/ssr.pid --log-file=$INSTALL_PATH/ssr.log + sleep 1 + ssr_test +} + +ssr_stop() { + cd $INSTALL_PATH/shadowsocks/ + python local.py -d stop --pid-file=$INSTALL_PATH/ssr.pid --log-file=$INSTALL_PATH/ssr.log +} + +ssr_restart() { + ssr_stop + ssr_start +} + +ssr_config() { + $EDITOR $INSTALL_PATH/config.json + ssr_restart +} + +BLOCKED=' +Update failed! For more information, see +https://github.com/the0demiurge/ShadowSocksShare-OpenShift/issues/17 +And edit `$WEBSITE` in this script.' + +ISSUE=' +The response was empty, try it 10 mins later or report it on +https://github.com/the0demiurge/CharlesScripts/issues' + +ssr_update() { + JSON=$(curl -L $WEBSITE/json) + # If failed + case $? in + 0) ;; + *) + echo -e $BLOCKED + exit $? + ;; + esac + + # If json is empty + case $JSON in + 'Not Found') + echo -e $BLOCKED + exit $? + ;; + '' | '{}') + echo $ISSUE + exit 2 + ;; + esac + + mv $INSTALL_PATH/config.json $INSTALL_PATH/config.json.bak.$(date +%y-%m-%d-%T) + echo -e "$JSON" | tee $INSTALL_PATH/config.json + ssr_restart + echo -e "Updated from $WEBSITE" +} + +ssr_xclip() { + xclip -o | tee $INSTALL_PATH/config.json + ssr_restart +} + +ssr_log() { + tail -f $INSTALL_PATH/ssr.log +} + +ssr_shell() { + cd $INSTALL_PATH + $SHELL +} + +ssr_clean() { + rm -ri $INSTALL_PATH/config.json.bak.* +} + +ssr_main() { + case $1 in + help) ssr_help ;; + install) ssr_install ;; + uninstall) ssr_uninstall ;; + update) ssr_update ;; + config) ssr_config ;; + xclip) ssr_xclip ;; + start) ssr_start ;; + stop) ssr_stop ;; + restart) ssr_restart ;; + test) ssr_test ;; + log) ssr_log ;; + shell) ssr_shell ;; + clean) ssr_clean ;; + *) ssr_help ;; + esac +} + +ssr_main $1