到目前为止,我有这样的:
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 command或sudo -i command以root身份运行命令。 -i选项在运行命令之前设置一个shell和环境。