使用密码 Sudo 并通过 SSH 附加到文件

使用密码 Sudo 并通过 SSH 附加到文件

我想做的是以下内容。

SSH 到远程主机。

将登录用户的authorized_keys 文件中的public_keys 附加到所有用户的.ssh/authorized_keys 文件中。

我在尝试在一行中使用密码执行 sudo & cat 时遇到了问题。有人知道如何解决这个问题吗?

我尝试实现这一目标的方法之一。

ssh -t $userHost -p $remotePort \
"for localUser in $(ls /home | grep -v $USER); \ 
do sudo mkdir -p /home/$localUser/.ssh && \
cat /home/$USER/.ssh/authorized_keys | sudo tee --append \
/home/$localUser/.ssh/authorized_keys > /dev/null; done"

但 sudo 命令似乎不能作为 ssh 命令使用。 sudoers 文件中的 NOPASSWD 不是一个选项。

答案1

sudo使用密码将需要一个tty.远程命令执行不会分配tty给它。因此,除非您允许,否则它将无法工作NOPASSWD

相反,考虑在远程服务器上拥有一个强制账户,使用脚本作为 shell,脚本运行命令。使用基于密钥的身份验证登录强制账户,以避免输入两次密码,自动运行脚本。在脚本的最后一行,发出命令exit以注销。由于这本质上是一个交互式会话,它将具有tty并允许您输入密码,而您必须进行的击键次数保持不变。

我想不出任何其他方法,除非 sudo 中有一个我不知道的新功能

答案2

这就是我解决它的方法。

#!/bin/bash

userHost="[email protected]"
remotePort="1234"
password="password"

# Send public key to remote host
echo "Sending public key to remote host..."
cat "$HOME/.ssh/id_rsa.pub" | ssh $userHost \ 
-p $remotePort "cat >> ~/.ssh/authorized_keys"

# Add the public key to all users on the remote system
ssh $userHost -p $remotePort 'echo '"$password"' | sudo -S \
ls /home/ && for localUser in $(ls /home | grep -v $USER); \
do sudo mkdir -p /home/$localUser/.ssh && \
sudo touch /home/$localUser/.ssh/authorized_keys && \
sudo chown "$localUser:$localUser" /home/$localUser/.ssh/authorized_keys && \
cat /home/$USER/.ssh/authorized_keys | sudo tee \
--append /home/$localUser/.ssh/authorized_keys > /dev/null; done'

我首先使用echo '"$password"' | sudo -S ls /home/垃圾命令从标准输入读取并将密码缓存在远程主机上。然后继续执行其余的 sudo 命令。

相当混乱的 oneliner,但无论如何这个脚本只打算在每个远程主机上运行一次。

我不喜欢这样的事实:我必须输入 SSH 密码两次,第一次将其存储在变量中,第二次继续第一次登录远程主机。

相关内容