Skip to content

Instantly share code, notes, and snippets.

@m3nt0r
Forked from mnewt/proxy-toggle.sh
Last active April 13, 2016 23:39
Show Gist options
  • Save m3nt0r/5897435 to your computer and use it in GitHub Desktop.
Save m3nt0r/5897435 to your computer and use it in GitHub Desktop.
Added "start" command which creates a local SSH tunnel to a pre-configured server. The connection may then be used as SOCKS proxy within the Mac OSX network settings (and this toggle script)
#!/bin/sh
SSH_HOST=you@some.server.tld
SSH_PORT=22
PROXY_INTERFACE="Wi-Fi"
PROXY_HOST=localhost
PROXY_PORT=8080
if [[ $1 == "start" ]]; then
ssh -D $PROXY_PORT -f -C -q -N $SSH_HOST -p$SSH_PORT
echo "SSH Tunnel created."
echo "======================================================"
ps ax | grep $PROXY_PORT | head -n 1
echo "======================================================"
elif [[ $1 == "on" ]]; then
sudo networksetup -setsocksfirewallproxy "$PROXY_INTERFACE" $PROXY_HOST $PROXY_PORT
echo "SOCKS proxy enabled"
elif [[ $1 == "off" ]]; then
sudo networksetup -setsocksfirewallproxystate "$PROXY_INTERFACE" off
echo "SOCKS proxy disabled"
elif [[ $1 == "status" ]]; then
echo "======================================================"
echo "Network Services:"
echo "======================================================"
networksetup -listallnetworkservices
echo
echo "======================================================"
echo "Current SOCKS Proxy Settings:"
echo "======================================================"
networksetup -getsocksfirewallproxy "$PROXY_INTERFACE"
echo
else
echo "`basename $0` toggles SOCKS proxy settings on OS X"
echo
echo "Usage: "
echo " $ proxy start # start SSH tunnel to use as SOCKS proxy"
echo " $ proxy on # turns SOCKS proxy on"
echo " $ proxy off # turns SOCKS proxy off"
echo " $ proxy status # prints status of proxy settings"
echo
echo "proxy interface: " $PROXY_INTERFACE
echo "proxy host: " $PROXY_HOST
echo "proxy port: " $PROXY_PORT
echo
exit 65 # end process with error to indicate incorrect arguments
fi
@Fastidious
Copy link

How about adding stop (to destroy the tunnel)? Right now I can just kill the process, but having a stop would be more elegant. It would be great if you could simplify it too, so something like tunnel on and tunnel off will start/stop the tunnel and set proxy on/off.

@Fastidious
Copy link

I have changed my fork to accommodate the above. It works great!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment