Skip to content

Instantly share code, notes, and snippets.

@michaelfranzl

michaelfranzl/login

Created Apr 17, 2020
Embed
What would you like to do?
Friction-less login to a tmux session on a suspended host
#!/bin/bash
# Copyright 2020 Michael Karl Franzl
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
# associated documentation files (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge, publish, distribute,
# sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or
# substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
# NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
# OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
set -e
host_name="example.com"
host_mac="00:00:00:00:00:00"
echoerr() { printf "%s\n" "$*" >&2; }
wakeonlan ${host_mac}
# exponential backoff strategy for the login
for i in 1 2 4 8 16; do
if [ $i -ge 16 ]; then
echoerr "Host ${host_name} did not wake up. Giving up."
exit 1
fi
echo "Waiting until host ${host_name} is awake..."
nc -z ${host_name} 22 && break
sleep $i
done
echo "Host ${host_name} is now awake. Logging in..."
ssh -t ${host_name} "tmux a || tmux"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.