diff --git a/setup/bindir/cloud-set-guest-sshkey.in b/setup/bindir/cloud-set-guest-sshkey.in index cf02bbdd661..2f19f1feee0 100755 --- a/setup/bindir/cloud-set-guest-sshkey.in +++ b/setup/bindir/cloud-set-guest-sshkey.in @@ -1,49 +1,73 @@ -#!/bin/bash -# -# Init file for SSH Public Keys Download Client -# -# chkconfig: 345 98 02 -# description: SSH Public Keys Download Client - -# Modify this line to specify the user (default is root) -user=ubuntu - - -# Get DomR Ip -DOMR_IP=$(ip route | grep default | cut -d' ' -f3) - -if [ ! -n "$DOMR_IP" ] -then - echo "DomR IP address not found. Exiting." - exit 1 -fi - -# Get ssh public key -homedir=$(grep ^$user /etc/passwd|awk -F ":" '{print $6}') -sshdir=$homedir/.ssh -authorized=$sshdir/authorized_keys -publickey=$(wget -t 3 -T 20 -O - http://$DOMR_IP/latest/public-keys 2>/dev/null) - -if [ $? -ne 0 ] -then - echo "Error receiving SSH public key. Exiting." - exit 1 -fi - - -if [ ! -e $sshdir ] -then - mkdir $sshdir -fi - -if [ ! -e $authorized ] -then - touch $authorized -fi - -cat $authorized|grep -v "$publickey" > $authorized -echo "$publickey" >> $authorized - - -exit 0 - +#!/bin/bash +# +# Init file for SSH Public Keys Download Client +# +# chkconfig: 345 98 02 +# description: SSH Public Keys Download Client + +# Modify this line to specify the user (default is root) +user=root + + + +# Add your DHCP lease folders here +DHCP_FOLDERS="/var/lib/dhclient/* /var/lib/dhcp3/*" +keys_received=0 +file_count=0 + +for DHCP_FILE in $DHCP_FOLDERS +do + if [ -f $DHCP_FILE ] + then + file_count=$((file_count+1)) + SSHKEY_SERVER_IP=$(grep dhcp-server-identifier $DHCP_FILE | tail -1 | awk '{print $NF}' | tr -d '\;') + + if [ -n $SSHKEY_SERVER_IP ] + then + logger -t "cloud" "Sending request to ssh key server at $SSHKEY_SERVER_IP" + + publickey=$(wget -t 3 -T 20 -O - http://$SSHKEY_SERVER_IP/latest/public-keys 2>/dev/null) + + if [ $? -eq 0 ] + then + logger -t "cloud" "Got response from server at $SSHKEY_SERVER_IP" + keys_received=1 + break + fi + else + logger -t "cloud" "Could not find ssh key server IP in $DHCP_FILE" + fi + fi +done + +# did we find the keys anywhere? +if [ "$keys_received" == "0" ] +then + logger -t "cloud" "Failed to get ssh keys from any server" + exit 1 +fi + + + +# set ssh public key +homedir=$(grep ^$user /etc/passwd|awk -F ":" '{print $6}') +sshdir=$homedir/.ssh +authorized=$sshdir/authorized_keys + + +if [ ! -e $sshdir ] +then + mkdir $sshdir +fi + +if [ ! -e $authorized ] +then + touch $authorized +fi + +cat $authorized|grep -v "$publickey" > $authorized +echo "$publickey" >> $authorized + + +exit 0 +