Mercurial > index.cgi > dotfiles
comparison .bash_aliases @ 265:df0b24d4fabd
Think I'm ready to check this all in now; shared dotfiles that can be "sent"
through an SSH connection to be used and cleaned up when finished.
author | Steve Huston <huston@srhuston.net> |
---|---|
date | Wed, 24 Apr 2024 16:15:40 -0400 |
parents | b00e6b403896 |
children | 48b4f41712dc |
comparison
equal
deleted
inserted
replaced
264:bb69763716a7 | 265:df0b24d4fabd |
---|---|
1 # Aliases are read from this file; no real reason to separate them out except | 1 # Aliases are read from this file; no real reason to separate them out except |
2 # for readability. | 2 # for readability. |
3 | 3 |
4 # | |
4 # Some settings which are architecture dependent | 5 # Some settings which are architecture dependent |
6 # | |
5 case `uname` in | 7 case `uname` in |
6 Darwin) | 8 Darwin) |
7 # DARWIN is used for the SSHFS mounts below | 9 # DARWIN is used for the SSHFS mounts below |
8 DARWIN="yes" | 10 DARWIN="yes" |
9 | 11 |
39 | 41 |
40 VNCVIEWER="vncviewer Shared=1 Fullcolor=1 " | 42 VNCVIEWER="vncviewer Shared=1 Fullcolor=1 " |
41 ;; | 43 ;; |
42 esac | 44 esac |
43 | 45 |
46 # | |
44 # Export some of those above for the benefit of future shells | 47 # Export some of those above for the benefit of future shells |
48 # | |
45 export DFSTAT MDATE | 49 export DFSTAT MDATE |
46 | 50 |
47 # SSH aliases | 51 # |
48 alias bh='ssh csesbh2.princeton.edu' | 52 # Create a service that can share files through to places we ssh to from here. |
53 # This should be pretty light, rooted in the $DOTHOME directory (see ~/.bashrc | |
54 # for information) and removed when we either request it or the shell exits. | |
55 # | |
56 ds() { | |
57 | |
58 PIDFILE=${DOTHOME}/.dotshare-PID | |
59 | |
60 # If we want to kill an existing server, let's do that first. | |
61 if [ "$1" == "end" -a -e $PIDFILE ]; then | |
62 kill `cat $PIDFILE` | |
63 unset DOTSHARE_PID DOTSHARE_PORT | |
64 echo "Server terminated" | |
65 return 0 | |
66 fi | |
67 | |
68 # Let's check if things exist and we can just use them as-is | |
69 if [ -e $PIDFILE ]; then | |
70 DOTSHARE_PID=`cat $PIDFILE` | |
71 DOTSHARE_PORT=`lsof -n -p $DOTSHARE_PID | grep LISTEN | awk '{print $9}' | sed 's/.*://'` | |
72 if [ -z $DOTSHARE_PORT ]; then | |
73 echo "Server PIDfile found but couldn't get a port, aborting" | |
74 return 255 | |
75 fi | |
76 echo "Existing server ${DOTSHARE_PID} listening on ${DOTSHARE_PORT}, setting environment" | |
77 export DOTSHARE_PID DOTSHARE_PORT | |
78 return 0 | |
79 fi | |
80 | |
81 # Nothing exists, so we need to make one; first, which python do we have | |
82 if hash python3 > /dev/null 2>&1 ; then | |
83 # Python 3.9 also accepts '-d' for a directory | |
84 serv_cmd="python3 -m http.server --bind localhost 0" | |
85 elif hash python > /dev/null 2>&1 ; then | |
86 # I think nothing else where I'd run this will need this one | |
87 serv_cmd="python -m SimpleHTTPServer 0" | |
88 else | |
89 echo "No python found, cannot start share server." | |
90 return 255 | |
91 fi | |
92 | |
93 # Spawning this in a subshell because the process won't go away and we want | |
94 # to background it, but we also want to set a trap around the whole thing, | |
95 # and we need to 'cd' to somewhere else to start it since older versions | |
96 # can't be passed a different path to serve. So there's some hacks here, | |
97 # but I don't think they're avoidable for the moment. Once Joshua and | |
98 # Xanadu have Python 3.9 at least, I can rework this whole thing. | |
99 ( | |
100 cd $DOTHOME | |
101 $serv_cmd > /dev/null 2>&1 & | |
102 P=$! | |
103 echo $P > ${DOTHOME}/.dotshare-PID | |
104 trap "kill $P 2>/dev/null; rm -f $PIDFILE; unset DOTSHARE_PID DOTSHARE_PORT" 0 | |
105 wait | |
106 ) & | |
107 disown %+ | |
108 | |
109 # Give it a moment to collect its thoughts... | |
110 sleep 1 | |
111 DOTSHARE_PID=`cat $PIDFILE` | |
112 DOTSHARE_PORT=`lsof -n -p $DOTSHARE_PID | grep LISTEN | awk '{print $9}' | sed 's/.*://'` | |
113 echo "Server PID $DOTSHARE_PID ready on port $DOTSHARE_PORT" | |
114 export DOTSHARE_PID DOTSHARE_PORT | |
115 } | |
116 | |
117 # | |
118 # SSH aliases/functions | |
119 # | |
49 cert() { | 120 cert() { |
50 # SSH key signing with Vault for administration | 121 # SSH key signing with Vault for administration |
51 export VAULT_ADDR='https://ajax.rc.princeton.edu:8200' | 122 export VAULT_ADDR='https://ajax.rc.princeton.edu:8200' |
52 ssh-add -d $HOME/.ssh/rc_vault_key-cert.pub > /dev/null 2>&1 | 123 ssh-add -d $HOME/.ssh/rc_vault_key-cert.pub > /dev/null 2>&1 |
53 if vault login -method=radius username=vi-srh; then | 124 if vault login -method=radius username=vi-srh; then |
55 ssh-add -t 36000 $HOME/.ssh/rc_vault_key | 126 ssh-add -t 36000 $HOME/.ssh/rc_vault_key |
56 else | 127 else |
57 echo Failed to login to vault, aborting | 128 echo Failed to login to vault, aborting |
58 fi | 129 fi |
59 } | 130 } |
60 alias dh='ssh srhuston.net' | 131 |
61 alias j='ssh joshua.srhuston.net' | 132 # I rename my keys from the standard so they're easy to glob on a commandline |
62 alias keys='ssh-add $HOME/.ssh/*.pvt' | 133 alias keys='ssh-add $HOME/.ssh/*.pvt' |
63 alias r='ssh -l root' | 134 |
64 alias rf='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -l root' | 135 # |
136 # These are for reattaching screen sessions, only useful on bastion systems | |
137 # | |
65 alias rbh='ssh -t csesbh2.princeton.edu screen -raAx csesbh2' | 138 alias rbh='ssh -t csesbh2.princeton.edu screen -raAx csesbh2' |
66 alias rj='ssh -t joshua.srhuston.net screen -raAx' | 139 alias rj='ssh -t joshua.srhuston.net screen -raAx' |
67 alias rx='ssh -t xanadu.astro.princeton.edu screen -raAx' | 140 alias rx='ssh -t xanadu.astro.princeton.edu screen -raAx' |
68 alias s=ssh | 141 |
69 alias sf='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null' | |
70 t() { | 142 t() { |
71 # Tunneling SSH - a simple 't hostname' will tunnel to xanadu and then | 143 # Tunneling SSH - a simple 't hostname' will tunnel to xanadu and then |
72 # connect to hostname, while 't hostname tunnelhost' will connect to | 144 # connect to hostname, while 't hostname tunnelhost' will connect to |
73 # tunnelhost and then hostname | 145 # tunnelhost and then hostname |
146 # Today (2024/03/30) I don't remember the last time I used this; retire? | |
74 T_HOST=xanadu.astro.princeton.edu | 147 T_HOST=xanadu.astro.princeton.edu |
75 if [ -n "$2" ] ; then | 148 if [ -n "$2" ] ; then |
76 T_HOST=$2 | 149 T_HOST=$2 |
77 fi | 150 fi |
78 ssh -t $T_HOST "ssh $1" | 151 ssh -t $T_HOST "ssh $1" |
79 } | 152 } |
80 alias x='ssh xanadu.astro.princeton.edu' | 153 |
81 | |
82 # Proxying/tunneling - predominantly for my Mac laptop | |
83 proxy() { | 154 proxy() { |
84 local PROXY_HOST PROXY_PORT PROXY_PATH PROXY_UMOUNT | 155 # Proxying/tunneling - predominantly for my Mac laptop |
156 local PROXY_HOST PROXY_PORT PROXY_PATH PROXY_UMOUNT PROXY_CMD | |
157 # We set a simple command to run over the proxy for normal connections, | |
158 # which we know will be multiplexed and stay active. If you're using a | |
159 # manual host for something, you'll want to use a "sleep 30" or something to | |
160 # keep the shell open long enough for the proxy to be used, or maybe even | |
161 # longer if you plan on disconnecting and reconnecting over time. | |
162 PROXY_CMD=${PROXY_CMD:-hostname} | |
85 case $1 in | 163 case $1 in |
86 home) | 164 home) |
87 if [ "$HOST" != "gallifrey" ] ; then | 165 if [ "$HOST" != "gallifrey" ] ; then |
88 echo "Not on gallifrey, no need for this" | 166 echo "Not on gallifrey, no need for this" |
89 return | 167 return |
128 # In theory you need to have a job stay on the remote host for the | 206 # In theory you need to have a job stay on the remote host for the |
129 # forwarding to stay open. However if you're using persistent/shared | 207 # forwarding to stay open. However if you're using persistent/shared |
130 # connections then the port stays open anyway. We still need a command | 208 # connections then the port stays open anyway. We still need a command |
131 # though, and 'hostname' returns quickly as well as giving a visual output | 209 # though, and 'hostname' returns quickly as well as giving a visual output |
132 # that you connected to the right place. | 210 # that you connected to the right place. |
133 ssh -D $PROXY_PORT -f -C -q $PROXY_HOST 'hostname' | 211 ssh -D $PROXY_PORT -f -C -q $PROXY_HOST "$PROXY_CMD" |
134 ( | 212 ( |
135 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ | 213 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ |
136 --proxy-server="socks5://127.0.0.1:$PROXY_PORT" \ | 214 --proxy-server="socks5://127.0.0.1:$PROXY_PORT" \ |
137 --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" \ | 215 --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" \ |
138 --user-data-dir="${PROXY_PATH}" > /dev/null 2>&1 | 216 --user-data-dir="${PROXY_PATH}" > /dev/null 2>&1 |
142 # ssh -O cancel -D $PROXY_PORT $PROXY_HOST | 220 # ssh -O cancel -D $PROXY_PORT $PROXY_HOST |
143 ) & | 221 ) & |
144 disown %+ | 222 disown %+ |
145 } | 223 } |
146 | 224 |
147 # Remote desktop/VNC | 225 # |
226 # Remote desktop/VNC - definitely outdated and maybe no longer useful? | |
227 # | |
148 eval "alias milton='ssh -L9930:milton:5900 -f joshua.srhuston.net \"sleep 5\"; ${VNCVIEWER}localhost:9930 &'" | 228 eval "alias milton='ssh -L9930:milton:5900 -f joshua.srhuston.net \"sleep 5\"; ${VNCVIEWER}localhost:9930 &'" |
149 | 229 |
230 # | |
150 # Programs | 231 # Programs |
232 # | |
151 alias atari='atari800 -height 800 -width 600' | 233 alias atari='atari800 -height 800 -width 600' |
152 alias base64='openssl enc -a' | 234 alias base64='openssl enc -a' |
153 alias irssi-test='irssi --home=$HOME/irssi-test/' | 235 alias irssi-test='irssi --home=$HOME/irssi-test/' |
154 alias pine='alpine' | 236 alias pine='alpine' |
155 alias ret='screen -raAx' | 237 alias ret='screen -raAx' |
156 alias rot13="tr 'a-zA-Z' 'n-za-mN-ZA-M'" | |
157 tt () { | 238 tt () { |
158 OPTS="-G" | 239 OPTS="-G" |
159 if [ -e ${HOME}/.tt/${1}.tin ] ; then | 240 if [ -e ${HOME}/.tt/${1}.tin ] ; then |
160 OPTS="${OPTS} ${HOME}/.tt/${1}.tin" | 241 OPTS="${OPTS} ${HOME}/.tt/${1}.tin" |
161 shift | 242 shift |
162 fi | 243 fi |
163 tt++ ${OPTS} $@ | 244 tt++ ${OPTS} $@ |
164 } | 245 } |
165 alias vi='vim' | 246 |
166 | 247 # |
167 # SSHFS mounts | 248 # SSHFS mounts |
168 # The $DARWIN check fills in a nice volname if this is a Mac | 249 # The $DARWIN check fills in a nice volname if this is a Mac |
250 # | |
169 alias junkpile="sshfs -oreconnect${DARWIN:+,volname=Junkpile} srhuston.net:junkpile $HOME/junkpile" | 251 alias junkpile="sshfs -oreconnect${DARWIN:+,volname=Junkpile} srhuston.net:junkpile $HOME/junkpile" |
170 alias sdh="sshfs -oreconnect${DARWIN:+,volname=srhuston.net} srhuston.net: $HOME/srhuston.net" | 252 alias sdh="sshfs -oreconnect${DARWIN:+,volname=srhuston.net} srhuston.net: $HOME/srhuston.net" |
171 alias sj="sshfs -oreconnect${DARWIN:+,volname=Joshua} joshua.srhuston.net: $HOME/joshua" | 253 alias sj="sshfs -oreconnect${DARWIN:+,volname=Joshua} joshua.srhuston.net: $HOME/joshua" |
172 alias sx="sshfs -oreconnect${DARWIN:+,volname=Xanadu} xanadu.astro.princeton.edu: $HOME/xanadu" | 254 alias sx="sshfs -oreconnect${DARWIN:+,volname=Xanadu} xanadu.astro.princeton.edu: $HOME/xanadu" |
173 alias vw="sshfs -oreconnect${DARWIN:+,volname=VW} vw.math.princeton.edu: $HOME/vw" | 255 alias vw="sshfs -oreconnect${DARWIN:+,volname=VW} vw.math.princeton.edu: $HOME/vw" |
174 alias tmu="sshfs -oreconnect${DARWIN:+,volname=tomenet-user} joshua.srhuston.net:Installs/tomenet/lib/user $HOME/Installs/tomenet/lib/user" | 256 alias tmu="sshfs -oreconnect${DARWIN:+,volname=tomenet-user} joshua.srhuston.net:Installs/tomenet/lib/user $HOME/Installs/tomenet/lib/user" |
175 | 257 |
258 # | |
176 # LDAP/host tools | 259 # LDAP/host tools |
260 # | |
177 alias ldm="ldapmodify -Q -Y GSSAPI -c" | 261 alias ldm="ldapmodify -Q -Y GSSAPI -c" |
178 alias ldsloop='while true; do read; clear; lds "$REPLY"; done' | 262 alias ldsloop='while true; do read; clear; lds "$REPLY"; done' |
179 | |
180 lds () { | 263 lds () { |
181 QUERY="$1" | 264 QUERY="$1" |
182 shift | 265 shift |
183 OPTS="" | 266 OPTS="" |
184 [[ "$1" =~ ^- ]] && { | 267 [[ "$1" =~ ^- ]] && { |
186 shift | 269 shift |
187 } | 270 } |
188 ldapsearch -Q -Y GSSAPI -LLL $OPTS "($QUERY)" $@ | 271 ldapsearch -Q -Y GSSAPI -LLL $OPTS "($QUERY)" $@ |
189 } | 272 } |
190 | 273 |
274 # | |
191 # Other | 275 # Other |
192 alias slurp="wget -r -l1 -np -nd -A.mp3" | 276 # |
193 alias zulu="date -u +%Y%m%d%H%M%SZ" | |
194 | |
195 # Other Functions | |
196 | |
197 certcheck() { | |
198 if [ -z "$1" ] ; then | |
199 echo "Usage: certcheck <hostname>[:port]" | |
200 echo " Defaults to port 443 if not specified." | |
201 return | |
202 fi | |
203 H=$1 | |
204 [[ $1 =~ :[0-9]+$ ]] || \ | |
205 H=$1":443" | |
206 echo -n Q | openssl s_client -connect $H | openssl x509 -noout -dates | |
207 } | |
208 | |
209 mc-backup() { | |
210 pushd ~/Dropbox/Saves/minecraft/saves; | |
211 if [ -d $1 ]; then | |
212 tar cvf - $1 | bzip2 > ../$1_`date +%Y%m%d%H%M%S`.tar.bz2; | |
213 fi; | |
214 popd | |
215 } | |
216 | |
217 TOhtml() { | |
218 OUTDIR=${1:-`mktemp -d TOHTML.XXXXXX`} | |
219 ROOT=`hg root` | |
220 | |
221 echo "<HTML><HEAD><TITLE>My dotfiles</TITLE></HEAD><BODY><UL>" > $OUTDIR/index.html | |
222 | |
223 for F in `hg locate` ; do | |
224 | |
225 # Files to ignore from the list | |
226 case $F in | |
227 .vim/*) | |
228 continue | |
229 ;; | |
230 *) | |
231 ;; | |
232 esac | |
233 | |
234 D=`echo $F | grep "/" | sed 's/\/[^\/]*$//'` | |
235 if [ $D ] ; then | |
236 mkdir -p $OUTDIR/$D | |
237 fi | |
238 | |
239 vim -n -e +TOhtml "+w ${OUTDIR}/${F}.html" +qa\! $ROOT/$F | |
240 echo "<LI><A href=${F}.html>$F</A></LI>" >> $OUTDIR/index.html | |
241 done | |
242 echo "</UL></BODY></HTML>" >> $OUTDIR/index.html | |
243 echo Files stored in $OUTDIR | |
244 } | |
245 | |
246 hgs() { | 277 hgs() { |
278 # Creates a hg server in the current repo and connects to it automatically. | |
247 # We assume here that if the host is a Mac, we're going to open the | 279 # We assume here that if the host is a Mac, we're going to open the |
248 # connection automatically, otherwise we echo the URL to the terminal to be | 280 # connection automatically, otherwise we echo the URL to the terminal to be |
249 # opened | 281 # opened |
250 ROOT=`hg root` | 282 ROOT=`hg root` |
251 if [ "$1" == "end" -a -e $ROOT/.hg/hgserve-PID ] ; then | 283 if [ "$1" == "end" -a -e $ROOT/.hg/hgserve-PID ] ; then |
263 else | 295 else |
264 open http://$URL/ | 296 open http://$URL/ |
265 fi | 297 fi |
266 fi | 298 fi |
267 } | 299 } |
268 | 300 mc-backup() { |
269 # vim: set filetype=sh : | 301 # Definitely time to rework this one - I don't even use Dropbox anymore! |
302 # Keeping it here for now just for the syntax, but this is probably no | |
303 # longer worth keeping either. | |
304 pushd ~/Dropbox/Saves/minecraft/saves; | |
305 if [ -d $1 ]; then | |
306 tar cvf - $1 | bzip2 > ../$1_`date +%Y%m%d%H%M%S`.tar.bz2; | |
307 fi; | |
308 popd | |
309 } | |
310 alias slurp="wget -r -l1 -np -nd -A.mp3" | |
311 alias zulu="date -u +%Y%m%d%H%M%SZ" | |
312 TOhtml() { | |
313 # Since I moved to hosting the hg repo, this is less useful to share things. | |
314 # But still a nice bit of code and worth keeping I think. Needs a rework to | |
315 # match the new style of the dotfile repo as of 2024/03/30 (splitting out | |
316 # shared configs, etc) | |
317 OUTDIR=${1:-`mktemp -d TOHTML.XXXXXX`} | |
318 ROOT=`hg root` | |
319 | |
320 echo "<HTML><HEAD><TITLE>My dotfiles</TITLE></HEAD><BODY><UL>" > $OUTDIR/index.html | |
321 | |
322 for F in `hg locate` ; do | |
323 | |
324 # Files to ignore from the list | |
325 case $F in | |
326 .vim/*) | |
327 continue | |
328 ;; | |
329 *) | |
330 ;; | |
331 esac | |
332 | |
333 D=`echo $F | grep "/" | sed 's/\/[^\/]*$//'` | |
334 if [ $D ] ; then | |
335 mkdir -p $OUTDIR/$D | |
336 fi | |
337 | |
338 vim -n -e +TOhtml "+w ${OUTDIR}/${F}.html" +qa\! $ROOT/$F | |
339 echo "<LI><A href=${F}.html>$F</A></LI>" >> $OUTDIR/index.html | |
340 done | |
341 echo "</UL></BODY></HTML>" >> $OUTDIR/index.html | |
342 echo Files stored in $OUTDIR | |
343 } | |
344 | |
345 # vim: set filetype=bash : |