Skip to content

Instantly share code, notes, and snippets.

@JinnLynn
Last active December 18, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JinnLynn/5795224 to your computer and use it in GitHub Desktop.
Save JinnLynn/5795224 to your computer and use it in GitHub Desktop.
使用autossh建立SSH通道,实现本地socks代理,系统需安装autossh(如果是OSX,还需要安装watch)。
# MacOSX-Kits: https://github.com/JinnLynn/MacOSX-Kits/blob/master/shell/inc/ssh.sh
JPROXY_SERVER_USR="YOUR SSH SERVER USERNAME"
JPROXY_SERVER="YOUR SSH SERVER"
JPROXY_SERVER_KEY="YOUR SSH KEY FILEPATH"
JPROXY_SOCKS_PORT="9527"
# 输出检查结果字符串
# 使用方法: 判断语句; _kits_check "说明文字"
# 如: [[ 0 -eq 0 ]]; _kits_check "0=0?"
function _kits_check() {
ret=$?
ok="\033[32m✔\033[39m"
fail="\033[31m✘\033[39m"
for (( i = 0; i < 40; i++ )); do echo -n " "; done
[[ $ret -eq 0 ]] && echo -en "$ok" || echo -en "$fail"
[[ ! -z "$1" ]] && echo -e "\r$1"
}
# ssh代理
function kits_ssh_proxy() {
mp="55000"
case "$1" in
"start" | "restart" )
kits_ssh_proxy stop
autossh -M $mp -f -N -D $JPROXY_SOCKS_PORT -i "$JPROXY_SERVER_KEY" $JPROXY_SERVER_USR@$JPROXY_SERVER
;;
"stop" )
# 杀死SSH进程
for p in `ps aux | grep ssh | grep $mp:127.0.0.1:$mp | awk '{print $2}'`; do
[[ ! -z "$p" ]] && kill -9 $p
done
# 如果SSH没有成功连接, 前述的进程将不存在,需手动杀死autossh进程
for p in `ps aux | grep autossh | grep $mp | awk '{print $2}'`; do
[[ ! -z "$p" ]] && kill -9 $p
done
;;
"alive" )
# 查找autossh进程
ret=`ps aux | grep autossh | grep -c $mp`
[[ $ret -gt 0 ]]; _kits_check "autossh"
ret=`lsof -i:$JPROXY_SOCKS_PORT`
[[ ! -z "$ret" ]]; _kits_check "SOCKS[127.0.0.1:$JPROXY_SOCKS_PORT]"
;;
"watch" )
watch -n 1 "lsof -i:$JPROXY_SOCKS_PORT"
;;
* )
;;
esac
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment