【发布时间】:2016-07-29 02:23:20
【问题描述】:
我正在编写一个脚本来将用户添加到 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 $user1@$line sudo useradd -m -d /home/$user $user
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo mkdir /home/$user/.ssh
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo touch /home/$user/.ssh/authorized_keys
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chmod 777 /home/$user/.ssh
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chmod 777 /home/$user/.ssh/authorized_keys
scp -i $basekey -o strictHostKeyChecking=no $keyfile $user1@$line:/home/$user1/
sleep 10
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo cat /home/$user1/id_rsa.pub > /home/$user/.ssh/authorized_keys
ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo cat /home/$user/.ssh/authorized_keys
echo ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chmod 600 /home/$user/.ssh/authorized_keys
echo ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chown $user.$user /home/$user/.ssh/authorized_keys
echo ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chmod 700 /home/$user/.ssh
echo ssh -i $basekey -o strictHostKeyChecking=no $user1@$line sudo chown $user.$user /home/$user/.ssh
done
虽然文件存在,但我遇到了以下错误。
./dev-enable.sh: line 24: /home/devuser/.ssh/authorized_keys: No such file or directory
我找不到插入此特定行的方法。我将不胜感激。
【问题讨论】:
-
哪条线实际上是失败的?为什么你
sleep在脚本中间?文件/home/devuser/.ssh/authorized_keys显然不存在 - 您希望脚本对此做什么? -
@l0b0 如果您看到我正在对 ec2 实例执行 scp,这可能需要 3-4 秒。所以在那个时候,我不希望我的脚本在没有 scp 操作的情况下继续运行。实际上,在该特定位置
/home/devuser/.ssh/authorized_keys中有一个文件夹和文件,该命令无法在其中写入公钥,我正在尝试添加。 -
所有脚本操作都是同步的,所以在完成之前不可能到达所有行之前的一行。你根本不需要
sleep。 -
你在哪里运行脚本可以粘贴路径吗?您的 EC2 实例中是否也有此路径? /home/devuser/
-
@error2007s 是的,我的 ec2 实例上确实有此路径。我在我的笔记本电脑上运行这个脚本。你看,我可以在第一行使用 useradd 命令创建用户。然后我还可以为用户创建 .ssh 文件夹和 authorized_keys 文件,但是我无法将 pub 文件内容写入 authorized_keys 文件。不知道为什么。
标签: linux shell amazon-ec2 interpolation