将密钥复制到 /root/.ssh/authorized_keys

将密钥复制到 /root/.ssh/authorized_keys

我正在尝试使用下面的脚本将文件(包含密钥)复制到远程计算机。但出现下面的错误

/root/.ssh/authorized_keys:权限被拒绝

#!/bin/bash

for i in `cat hosts`

do cat team.keys | sshpass -f pass ssh -t  -o "StrictHostKeyChecking no"  normal_user@ad@${i} "sudo cat >> /root/.ssh/authorized_keys";

done

-- 请分享您的建议以确定解决方案。

答案1

sudo cat >> /root/.ssh/authorized_keys

该命令不会执行您认为的操作。

shell(以普通用户身份运行)将在开始执行命令之前实现重定向sudo cat。因此,重定向以非 root 用户身份发生,该用户显然没有写入 rootauthorized_keys文件的权限。

标准解决方法是使用tee带有 sudo 的命令:

#!/bin/bash

for i in $(cat hosts)

do cat team.keys | sshpass -f pass ssh -t -o "StrictHostKeyChecking no" \ 
    normal_user@ad@${i} "sudo tee -a /root/.ssh/authorized_keys >/dev/null"

done

在此版本中,运行 as 的远程 shellnormal_user@ad将执行命令 as sudo <some parameters for sudo> >/dev/null,并且该sudo命令将获得 root 访问权限并执行tee /root/.ssh/authorized_keys

tee命令将接收从标准输入通过管道传入的密钥,并将其输入的一个副本写入文件/root/.ssh/authorized_keys(它可以这样做,因为它以 root 身份运行),并将另一个副本传递到标准输出。额外的副本返回到第一个以 运行的远程 shell normal_user@ad,然后将其发送到/dev/null

相关内容