2016-07-28 4 views
0

Ich schreibe ein Skript, um Benutzer zu AWS ec2-Instanz hinzuzufügen. Unten ist das Shell-Skript.Kann Schlüssel zu remote Maschine für Benutzer nicht hinzufügen

file=$2 
user=$1 
user1="ec2-user" 
basekey="/home/user-home/some-folder/test.pem" 
keyfile=$3 
file1=`cat /home/user-home/.ssh/id_rsa.pub` 
for line in `cat $file` 
do 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo useradd -m -d /home/$user $user 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo mkdir /home/$user/.ssh 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo touch /home/$user/.ssh/authorized_keys 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chmod 777 /home/$user/.ssh 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chmod 777 /home/$user/.ssh/authorized_keys 
    scp -i $basekey -o strictHostKeyChecking=no $keyfile [email protected]$line:/home/$user1/ 
    sleep 10 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo cat /home/$user1/id_rsa.pub > /home/$user/.ssh/authorized_keys 
    ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo cat /home/$user/.ssh/authorized_keys 
    echo ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chmod 600 /home/$user/.ssh/authorized_keys 
    echo ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chown $user.$user /home/$user/.ssh/authorized_keys 
    echo ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chmod 700 /home/$user/.ssh 
    echo ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo chown $user.$user /home/$user/.ssh 
done 

Ich bekomme unter Fehler obwohl die Datei dort vorhanden ist.

./dev-enable.sh: line 24: /home/devuser/.ssh/authorized_keys: No such file or directory 

Ich kann keinen Weg finden, diese spezielle Linie zu interpolieren. Ich würde mich über jede Hilfe hier freuen.

+0

definiert, welche Linie ausfällt eigentlich? Warum schläfst du mitten im Drehbuch? Die Datei '/ home/devuser/.ssh/authorized_keys' existiert offensichtlich nicht - was würden Sie von dem Skript erwarten? – l0b0

+0

@ l0b0 Wenn Sie sehen, mache ich eine scp zu ec2-Instanz, die 3-4 Sekunden dauern kann. Zu diesem Zeitpunkt möchte ich nicht, dass mein Skript ohne scp-Operation läuft. Tatsächlich gibt es einen Ordner und eine Datei an diesem bestimmten Ort '/ home/devuser/.ssh/authorized_keys', in dem der Befehl den öffentlichen Schlüssel nicht schreiben kann, versuche ich hinzuzufügen. –

+0

Alle Skriptoperationen sind synchron, daher ist es * unmöglich *, eine Zeile vor * allen * Zeilen zu erreichen, bevor es fertig ist. Sie müssen überhaupt nicht "schlafen". – l0b0

Antwort

0

Ich konnte das Problem beheben, eine solche Datei oder ein Verzeichnis. Ich habe den falschen Teil des Befehls gesehen. Ich konnte es mithilfe der Interpolation und der korrekten Syntax des Shell-Befehls auflösen. unten ist der richtige Befehl, um mit einer solchen Situation umzugehen.

ssh -i $basekey -o strictHostKeyChecking=no [email protected]$line sudo bash -c "'cat > /home/$user/.ssh/authorized_keys'" < $file1 

und file1 wie unten

file1=/home/user-home/.ssh/id_rsa.pub 
Verwandte Themen