上次写了一个单用户的脚本可以修改配置文件的密码并重启服务,这次在上次脚本的基础上做了些改进,对多用户版的配置文件进行修改。
脚本结构依旧和单用户的相同,只是加入了端口的选择和将密码输出到外部API的功能。端口选择可以通过参数修改指定端口的密码,外部API可以放在Web目录让其他外部程序调用,也可以放在内部位置只供本地应用调用。
#!/bin/bash
#================================================================
# Script for Shadowsocks Multi User Password Renewing on Ubuntu/Debian
# @author minirplus
# Usage: ./ss-password-renew.sh [port]
# More info: https://blog.minirplus.com/5817/
#================================================================
config_path='/etc/shadowsocks-multiuser.json'
port=$1
public_api_path='/var/www/public-api-'"$port"'.json'
# verify if port is define
if [ -z "$port" ] ; then
echo "[ERROR] you must provide the port for renew the password."
exit 1;
fi
# get old password
old_password=$(grep "$port" "$config_path")
password_index=$(expr index "$old_password" 🙂
old_password=${old_password:password_index}
old_password=${old_password%%,*}
old_password=${old_password// /}
old_password=${old_password:1:$((${#old_password}-2))}
echo "your old password is $old_password"
# generate new password
new_password=$RANDOM
echo "your new password is $new_password"
# replace old password to new password
echo "replace new password $new_password to the shadowsocks config file on port $port..."
sed -i 's/'"$old_password"'/'"$new_password"'/g' "$config_path"
# update public api file
echo "update public api file $public_api_path..."
now=$(date +"%Y-%m-%d %T")
echo '{"update": "'"$now"'", "port": "'"$port"'", "password": "'"$new_password"'"}' | tee "$public_api_path"
# restart shadowsocks service
echo "Restarting shadowsocks service..."
/usr/local/bin/ssserver -c "$config_path" -d restart
# All Done!
echo "All Done!"
echo "You can now use new password $new_password on port $port to login shadowsocks service now!"