summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2015-09-10 14:48:39 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2015-09-10 14:48:39 -0400
commit3b4a41acf668ffe51a0c2a4fb59247b19fa6e668 (patch)
tree4845f5d51ae38874b0102463498bcb1090a14a9e
parent78bbb9c57a50b7a121bd1f3d182f05afe2742f2a (diff)
Add sync script for authorized_keys.
-rwxr-xr-xbin/kj_sync_authorized_keys.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/bin/kj_sync_authorized_keys.sh b/bin/kj_sync_authorized_keys.sh
new file mode 100755
index 0000000..9cedd56
--- /dev/null
+++ b/bin/kj_sync_authorized_keys.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+declare -r begin_marker="### BEGIN MANAGED_BY_KJ_SYNC_AUTHORIZED_KEYS.SH ###"
+declare -r end_marker="### END MANAGED_BY_KJ_SYNC_AUTHORIZED_KEYS.SH ###"
+declare -r overwrite=true
+declare -r tmpdir=$(mktemp -d /tmp/kj_sync_authorized_keys.XXXXX)
+
+targets=(
+ tesuji.6.orbekk.com
+ login.6.orbekk.com
+ minecraft.6.orbekk.com
+ backup.6.orbekk.com
+ login.pvv.ntnu.no
+ aji.orbekk.com
+ moyo.orbekk.com
+)
+authorized_keys_file=$HOME/dotfiles/authorized_keys
+
+add_keys_to_file() {
+ filename="$1"
+ awk \
+ "/$begin_marker/"' { exit 0 } { print }' \
+ ${filename} > ${filename}.header
+ awk \
+ "/$end_marker/"' { should_output=1 } should_output { print }' \
+ ${filename} > ${filename}.footer
+
+ cat "${filename}.header" > ${filename}
+ echo "${begin_marker}" >> ${filename}
+ echo "# WARNING: ANY CHANGES WILL BE OVERWRITTEN" >> ${filename}
+ cat "$authorized_keys_file" >> ${filename}
+ echo "${end_marker}" >> ${filename}
+ cat "${filename}.footer" >> ${filename}
+}
+
+for target in ${targets[@]}; do
+ echo "syncing $target"
+ tmp="${tmpdir}/${target}"
+ touch ${tmp}
+ if [[ $overwrite != true ]]; then
+ ssh ${target} 'cat .ssh/authorized_keys || echo -n' > ${tmp}
+ fi
+ add_keys_to_file "${tmp}"
+ ssh ${target} 'mkdir -p .ssh'
+ cat "${tmp}" | ssh ${target} 'cat > .ssh/authorized_keys.tmp && mv .ssh/authorized_keys{.tmp,}'
+done