diff options
Diffstat (limited to 'snippets/keep_ssh_host_keys')
-rw-r--r-- | snippets/keep_ssh_host_keys | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/snippets/keep_ssh_host_keys b/snippets/keep_ssh_host_keys index 93a6fadb..527c9926 100644 --- a/snippets/keep_ssh_host_keys +++ b/snippets/keep_ssh_host_keys @@ -8,14 +8,17 @@ keys_found=no insmod /lib/jbd.o insmod /lib/ext3.o +mkdir -p /tmp/ssh + drives=$(list-harddrives | awk '{print $1}') for disk in $drives; do DISKS="$DISKS $(fdisk -l /dev/$disk | awk '/^\/dev/{print $1}')" done +# Try to find the keys on ordinary partitions for disk in $DISKS; do name=$(basename $disk) - mkdir -p /tmp/$name /tmp/ssh + mkdir -p /tmp/$name mount $disk /tmp/$name [ $? -eq 0 ] || continue # Skip to the next partition if the mount fails @@ -30,6 +33,38 @@ for disk in $DISKS; do rm -r /tmp/$name done +# Try LVM if that didn't work +if [ "$keys_found" = "no" ]; then + lvm lvmdiskscan + vgs=$(lvm vgs | tail -n +2 | awk '{ print $1 }') + for vg in $vgs; do + # Activate any VG we found + lvm vgchange -ay $vg + done + + lvs=$(lvm lvs | tail -n +2 | awk '{ print "/dev/" $2 "/" $1 }') + for lv in $lvs; do + tmpdir=$(mktemp -d findkeys.XXXXXX) + mkdir -p /tmp/${tmpdir} + mount $lv /tmp/${tmpdir} || continue # Skip to next volume if this fails + + # Let's see if the keys are in there + if [ -d /tmp/${tmpdir}/etc/ssh ]; then + cp -a /tmp/${tmpdir}/etc/ssh/ssh_host* /tmp/ssh/ + keys_found="yes" + umount /tmp/${tmpdir} + break # We're done! + fi + umount /tmp/${tmpdir} + rm -r /tmp/${tmpdir} + done + + # And clean up.. + for vg in $vgs; do + lvm vgchange -an $vg + done +fi + # Loop until the ssh rpm is installed if [ "$keys_found" = "yes" ]; then while : ; do |