2016-07-28 3 views
0

Я пишу скрипт для добавления пользователя в экземпляр aws ec2. Ниже приведен сценарий оболочки.Не удается добавить ключ к удаленному компьютеру для пользователя

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 

Я получаю ниже ошибки, хотя файл присутствует там.

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

Я не могу найти способ интерполирования этой конкретной линии. Я был бы признателен за любую помощь в этом.

+0

Какая линия неудачников? Почему вы «спите» в середине скрипта? Файл '/ home/devuser/.ssh/authorized_keys' явно не существует - что бы вы ожидали от сценария? – l0b0

+0

@ l0b0 Если вы видите, что я делаю экземпляр scp для ec2, который займет 3-4 секунды. Поэтому на этот момент я не хочу, чтобы мой скрипт работал без операции scp. На самом деле есть папка и файл в этом конкретном месте '/ home/devuser/.ssh/authorized_keys', в котором команда не может писать открытый ключ, я пытаюсь добавить. –

+0

Все операции сценария синхронны, поэтому * невозможно * достичь строки до * всех * строк до ее завершения. Вам не нужно «спать» вообще. – l0b0

ответ

0

Я смог решить проблему Нет такого файла или каталога. Я искал неправильную часть команды. Я смог его решить, используя интерполяцию и правильный синтаксис команды оболочки. ниже правильная команда для обработки такой ситуации.

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

и file1 определяется как ниже

file1=/home/user-home/.ssh/id_rsa.pub 
Смежные вопросы