在我与远程服务器断开连接之前,如何成为该服务器的 root 权限?

在我与远程服务器断开连接之前,如何成为该服务器的 root 权限?

到目前为止我有这个:

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

使用su

su(替代用户的缩写)命令可以更改登录会话的所有者(即最初通过登录系统创建该会话的用户),而无需所有者先退出该会话。
[...]
su 命令语法的简化表达为:
su [选项] [命令] [-] [用户名]

虽然你真的应该sudo所有命令,但是...su是如何执行您所要求的操作。

答案3

用于sudo -i交互式 root shell。

使用sudo commandsudo -i command以 root 身份运行命令。该-i选项在运行命令之前设置 shell 和环境。

相关内容