Last active
December 14, 2015 05:39
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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