2016-07-28 46 views
0

我正在編寫腳本以將用戶添加到aws ec2實例。以下是shell腳本。無法爲用戶添加密鑰到遠程計算機

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

所有的腳本操作都是同步的,所以在完成之前,不可能*在* all *行之前到達一行。你根本不需要「睡覺」。 – l0b0

回答

0

我能解決問題沒有這樣的文件或目錄。我正在看命令的錯誤部分。我能夠使用插值和正確的shell命令語法來解決它。下面是處理這種情況的正確命令。

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

和文件1定義如下

file1=/home/user-home/.ssh/id_rsa.pub 
相關問題