我如何成为远程服务器上的根,直到我从该服务器断开连接?

到目前为止,我有这样的:

sshpass -p "password" ssh -q [email protected] " [ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@" ; whoami ; [run some commands as root]" 

我一直给我用户名作为whoami答案。 我想一旦我连接到服务器就成为root(但我只能用用户名连接到它)。 我怎样才能在整个连接到服务器的根?

澄清:

我想访问远程服务器。 这是强制性的,我连接为“用户名”,然后切换到根运行和复制文件,只有根能够做到。 所以,当我通过SSH连接到服务器,我想成为根,直到我的命令在远程服务器结束。 我的问题是,我不能这样做,因为我没有知识,所以我在这里张贴。

限制:

  • 不能使用rsync。

  • 必须以“用户名”连接到服务器,然后切换到root用户

  • 这段代码是在for循环中,所以我不想使用su因为它会一直询问密码

我不认为sudo会像你希望的那样工作。

如果你有一个命令像sudo ... ; blah 最初的shell是什么解释; 。 所以sudo命令被发出,然后closures,然后blah命令被shell执行。

我可能会试图改变你的命令,所以你做这样的事情。 下面的例子假设sudo不会提示你input密码,因为你已经设置了NOPASSWD。

 echo "commands to run on remote" | sshpass -p "password" ssh -q [email protected] "exec sudo /bin/bash" 

一个简单的例子就是做一些类似echo whoami | sudo bash东西 echo whoami | sudo bash

你也做这样的事情。

 cat <<REMOTECOMMANDS | sshpass -p "password" ssh -q [email protected] "exec sudo /bin/bash" whoami command1 command2 command2 REMOTECOMMANDS 

使用su

su(替代用户的简称)命令使得可以通过login系统来更改login会话的所有者(即,最初创build该会话的用户),而所有者不必首先从该会话中注销。
[…]
su命令语法的简化expression式是:
su [选项] [命令] [ – ] [用户名]

虽然,真的,你应该sudo所有的命令,但是… su是你如何做你所问。

使用sudo -i作为交互式的根shell。

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