到目前为止我有这个:
sshpass -p "password" ssh -q [email protected] " [ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@" ; whoami ; [run some commands as root]"
whoami 一直给我用户名作为答案。我想在连接到服务器后立即成为 root(但我只能使用用户名连接到它)。我怎样才能在连接到服务器的整个过程中一直是 root?
澄清:
我想访问远程服务器。我必须以“用户名”身份连接,然后切换到 root 来运行和复制只有 root 才能执行的文件。因此,当我通过 ssh 连接到该服务器时,我希望以 root 身份运行,直到我的命令在远程服务器上完成。我的问题是我无法这样做,因为我没有这方面的知识,因此我在这里发布它。
限制:
无法使用 rsync。
必须以“用户名”身份连接到服务器,然后切换到 root
此代码在 for 循环中,所以我不想使用,
su
因为它会一直要求输入密码
答案1
我认为 sudo 不会按照您希望的方式发挥作用。
如果您有一个命令,例如sudo ... ; blah
初始 shell 会解释;
。因此,发出 sudo 命令,然后关闭,然后 shell 会执行 blah 命令。
我可能会想改变你的命令,让你做这样的事情。下面的例子假设 sudo 不会提示你输入密码,因为你已经设置了 NOPASSWD。
echo "commands to run on remote" | sshpass -p "password" ssh -q [email protected] "exec sudo /bin/bash"
一个简单的例子就是做类似的事情echo whoami | sudo bash
。
你也会做类似的事情。
cat <<REMOTECOMMANDS | sshpass -p "password" ssh -q [email protected] "exec sudo /bin/bash"
whoami
command1
command2
command2
REMOTECOMMANDS
答案2
答案3
用于sudo -i
交互式 root shell。
使用sudo command
或sudo -i command
以 root 身份运行命令。该-i
选项在运行命令之前设置 shell 和环境。