我正在编写一个 bash 脚本来收集多台主机上某些文件的下落。我已经到了可以使用 ssh 登录、执行多条命令的地步,但在某些主机上,但在多台主机上,我需要切换到其他用户。
我遇到的问题是因为我不是 root 用户,也不是我需要切换到的用户。所以我不断收到密码提示或错误提示,因为我不是 root 用户,所以不允许输入密码或错误。
我如何只输入一次自己的密码?
我不是 root 用户,其他用户也不是。我想我需要使用“sudo su”,但我是否向提示输入了自己的密码?我尝试使用 expect 和 echo -e "pwd" | sudo -Ssu 到不同的用户并让其执行命令?
到目前为止我已经:
#!bin/bash
...
# works fine
output=$(ssh -q $USER@host "whoami;whoami")
...
# prompts for pwd and executes command after exiting the new shell
output=$(ssh -t -q $USER@$host "sudo su - otheruser ; whoami"
...
答案1
要使用 sudo 以另一个用户身份运行命令,请配置为允许您访问其他帐户,请使用
sudo -u otheruser yourcommand
和您的密码。
要使用其他用户的密码获取 shell,请使用
su -c "yourcommand" otheruser
sudo 会缓存密码,而 su 则不会。如果想避免多次输入密码,您可以使用任一命令启动 shell,并在注销前执行所有需要执行的操作。
另一件事:
sudo su
是一种反模式,sudo su - otheruser
甚至更多,因为它su
仅用于启动一个 shell。sudo bash
(或者你使用的 shell)将是相同的。
如果您想从 sudo 获取 shell,请使用sudo -s
(shell) 或sudo -i
(login shell)。