Skip to content

Instantly share code, notes, and snippets.

@temoto
Last active December 14, 2015 05:39
Show Gist options
  • Save temoto/5036687 to your computer and use it in GitHub Desktop.
Save temoto/5036687 to your computer and use it in GitHub Desktop.
Super awesome, simple, fast and robust deploy system. It has only 2 drawbacks: flexible by changing code and user must know what he does. Part 1 - prepare access to target machine.
#!/bin/bash
# Stop on errors
set -e
# Config
: ${user=stork-deploy}
: ${ssh_public_key="ssh-dss AAAAB3NzaC1kc3MAAACBAIbzNCxj+N8ZGcEeel1jMfy9MpBOoLUQXR+fxgqsXYiFkAB6e2deqKHXh+TuntWQwsoPcXi2/0UaWZkgR3JmJxrqFM3/aAeUUupDFLnUFSuz+L2y4hke8GAeLHuzaZ30HfvDU+AO4uQF6obLl5xs88H5BYPvmzhxQcPdOiwkK1XDAAAAFQCwh2kXaGbJGWE+Jaw78cxKNq+JHQAAAIA4X3JfuQ6eYm0N1EWPcWf46rTT0O0TNnBXlhNRhSQNnxbcLjF8ZYG/tYLRJA/J8dMgi/4ZojW4Hq7CluYq68ycf2FOS3S60vdoEv++q7oq8jKHyfQtzo+Jq8q0yMXd+PBnHp7s4v8AHK7ifz/LotCfg7d9+XAbCt//qjwZgPTulQAAAIBzptzN3d+yLu63MraeVdvz5nYDCwiy94FKaSSfPbHWH9iKb8jyJ1smrsM4SV9/ongsMAnDIA340HYFZqBY/iZEak84BTnjA89sZmUP/8E1Ou7WL/Lsx/kMfLuh4zANoqzMbwir7zm69x5ZqRhSqBs2J8iLx2hCX5zwWhoDnpVIUg== stork deploy"}
: ${sudoers_conf="/etc/sudoers.d/$user"}
version=1
install() {
# Check requirements
test "`whoami`" = "root"
which chmod >/dev/null
which sudo >/dev/null
which useradd >/dev/null
which whoami >/dev/null
echo "- create user"
useradd --create-home --system --user-group "$user"
sudo -inu "$user" bash -ec "mkdir ~/.ssh; echo '$ssh_public_key' >~/.ssh/authorized_keys; chmod go-w ~; chmod -R go-rwx ~/.ssh"
echo "- grant sudo"
test ! -f "$sudoers_conf"
echo "$user ALL=(ALL) NOPASSWD: ALL" >"$sudoers_conf"
chmod 0440 "$sudoers_conf"
sudo -inu "$user" bash -ec 'echo -n "testing sudo... "; s=`sudo -n whoami`; test "$s" = "root" && echo ok'
}
revoke() {
echo "- revoke sudo"
rm -f "$sudoers_conf"
}
remove() {
opt=""
if [ -z "$1" ]; then
: # nothing
elif [ "$1" = "purge" ]; then
opt="--remove"
else
echo "remove: invalid option: $1" >&2
exit 1
fi
# Check requirements
test "`whoami`" = "root"
which userdel >/dev/null
echo "- userdel $opt $user"
userdel $opt "$user"
}
case "$1" in
--version)
echo "Version: $version"
exit 0
;;
"")
echo "Usage: curl https://gist.github.com/temoto/5036687/raw/stork-deploy-init.bash |sudo bash /dev/stdin {install | purge | revoke | uninstall}"
echo "Do not forget to open a safety root shell in case of problems with sudoers.d."
echo "Read the code."
exit 1
;;
install)
install
;;
purge)
revoke
remove purge
;;
revoke)
revoke
;;
uninstall)
revoke
remove
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment