You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
4.8 KiB

#!/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 '(?<!//)(?<="local_port":)\d+')
echo "local_port is $PORT; if any exceptions orrured, please install jq"
fi
echo 'connection information:'
curl ipinfo.io --socks5 localhost:$PORT
echo
curl cip.cc --socks5 localhost:$PORT
if [ $? == 0 ]; then
if [[ -z $(which proxychains4 2>/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