@@ -13,30 +13,22 @@ set -e
13
13
14
14
usage () {
15
15
grep ' ^#/' < " $0 " | cut -c 4-
16
+ exit 2
16
17
}
17
18
18
19
TEMPDIR=$( mktemp -d)
19
20
20
- # Parse args.
21
- ARGS=$( getopt --name " $0 " --long help,snapshot: --options hs -- " $@ " ) || {
22
- usage
23
- exit 2
24
- }
25
- eval set -- $ARGS
26
-
27
21
while [ $# -gt 0 ]; do
28
22
case " $1 " in
29
23
-h|--help)
30
24
usage
31
- exit 2
32
25
;;
33
26
-s|--snapshot)
34
- shift 2
35
- snapshot=$1
36
- ;;
37
- --)
27
+ snapshot=$2
38
28
shift
39
- break
29
+ ;;
30
+ * )
31
+ usage
40
32
;;
41
33
esac
42
34
shift
@@ -47,6 +39,11 @@ if [ -n "$ppid_script" ]; then
47
39
ppid_name=$( basename $ppid_script )
48
40
fi
49
41
42
+ sshkeygen_multiple_hash_formats=false
43
+ if (ssh-keygen --a-dedicated-help-flag-would-be-great 2>&1 | grep ' ssh-keygen -l ' | grep -q -- ' -E' ); then
44
+ sshkeygen_multiple_hash_formats=true
45
+ fi
46
+
50
47
# Bring in the backup configuration
51
48
. $( dirname " ${BASH_SOURCE[0]} " ) /ghe-backup-config
52
49
@@ -56,14 +53,18 @@ keys="ssh_host_dsa_key.pub ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_h
56
53
57
54
# Get all the host ssh keys tar from all snapshots directories
58
55
if [ -n " $snapshot " ]; then
56
+ if [ ! -d " $snapshot " ]; then
57
+ echo " Invalid snapshot directory: $snapshot " >&2
58
+ exit 1
59
+ fi
59
60
ssh_tars=$( find " $snapshot " -maxdepth 1 -type f -iname ' ssh-host-keys.tar' )
60
61
else
61
62
ssh_tars=$( find " $GHE_DATA_DIR " -maxdepth 2 -type f -iname ' ssh-host-keys.tar' )
62
63
fi
63
64
64
65
# Store the current backup snapshot folder
65
66
if [ -L " $GHE_DATA_DIR /current" ]; then
66
- current_dir=$( readlink -f " $GHE_DATA_DIR /current" )
67
+ current_dir=$( cd " $GHE_DATA_DIR /current" ; pwd -P )
67
68
fi
68
69
69
70
leaked_keys_found=false
@@ -72,7 +73,11 @@ for tar_file in $ssh_tars; do
72
73
for key in $keys ; do
73
74
if $( tar -tvf " $tar_file " $key & > /dev/null) ; then
74
75
tar -C $TEMPDIR -xvf " $tar_file " $key & > /dev/null
75
- fingerprint=$( ssh-keygen -lf $TEMPDIR /$key | cut -d ' ' -f 2)
76
+ if $sshkeygen_multiple_hash_formats ; then
77
+ fingerprint=$( ssh-keygen -l -E md5 -f $TEMPDIR /$key | cut -d ' ' -f 2 | cut -f2- -d' :' )
78
+ else
79
+ fingerprint=$( ssh-keygen -lf $TEMPDIR /$key | cut -d ' ' -f 2)
80
+ fi
76
81
if echo " $fingerprint_blacklist " | grep -q " $fingerprint " ; then
77
82
leaked_keys_found=true
78
83
if [ " $current_dir " == $( dirname " $tar_file " ) ]; then
0 commit comments