【问题标题】:Can't add key to remote machine for user无法为用户添加密钥到远程机器
【发布时间】: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


【解决方案1】:

我能够解决问题没有这样的文件或目录。我正在查看命令的错误部分。我能够使用插值和正确的 shell 命令语法来解决它。下面是处理这种情况的正确命令。

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

file1定义如下

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 2013-06-28
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多