我有 ubuntu 15.10 操作系统。 我写了一个 shell 脚本来执行多个命令,它们是:
登录root root@dalya-B5400:/home/hduser 进入snort目录,打开ids模式,将抓包转化为文本格式,最后退出该目录和root,然后登录hadoop用户"root@dalya-B5400:/home/hduser ", 启动所有进程并将 snort 日志文件发送到 hadoop。
我在帐户“hduser@dalya-B5400”中,这是普通用户。 我需要在该用户中执行一些命令:“root@dalya-B5400:/home/hduser ”所以我使用了:$ sudo su 并登录到它。 在这里完成工作后,我想回到普通用户“hduser@dalya-B5400”
我的脚本一直有效,直到从 root 登录到 hadoop 用户,这里我关注一个问题,我使用了这个命令(一次一个):
$ su - & sshpass -p password ssh -o StrictHostKeyChecking=no hduser@dalya-B5400
$ sudo -iu hduser
$ sudo su - hduser
它登录到 hadoop 用户,但之后退出而不执行它后面的其余命令。
我还尝试从当前调用第二个 shell 脚本,但它也给出相同的结果并且不打开普通用户。
我的主要 shell 脚本名为 snort-command,它包含以下内容:
#!/bin/bash
cd ~/snort5_src
cd snort-2.9.9.0
snort -dev -n 20 -l /home/hduser/log9 -b -c /etc/snort5/snort.conf
chmod a+rwx /home/hduser/log9/snort.log.*
tcpdump -n -tttt -r /home/hduser/log9/snort.log.* > /home/hduser/log9/bigfile2.txt
sshpass -p password ssh -o StrictHostKeyChecking=no hduser@dalya-B5400
/home/hduser/hadoop
第二个 shell 脚本名为 hadoop 并包含:
#!/bin/bash
/usr/local/hadoop/bin/start-all.sh
hadoop fs -put /home/hduser/log9/bigfile2.txt user/hduser/li
我还尝试从当前打开新终端:
$ gnome-terminal
但它也打开当前用户而不是普通用户。
有什么建议吗?
最佳答案
您可以通过 SSH 使用普通用户登录,然后使用以下命令以 root 身份执行命令(您需要确保您的普通用户在 sudoers
中):
sshpass -p 'mynormaluserpassword' ssh -o StrictHostKeyChecking=no mostafa@remotehost "whoami && id ; echo 'mynormaluserpassword' | sudo -S sh -c 'whoami; id; echo Hello from root user'"
结果如下:
mostafa
uid=1033(mostafa) gid=1033(mostafa) groups=1033(mostafa)
[sudo] password for mostafa: root
uid=0(root) gid=0(root) groups=0(root)
Hello from root user
解释:
- 我使用名为
mostafa
的普通用户登录 我执行了
whomai
然后打印了这些结果的id
:莫斯塔法 uid=1033(mostafa) gid=1033(mostafa) groups=1033(mostafa)
我执行了另外 3 个命令
'whoami; ID; echo Hello from root user'
但使用sudo
相当于 root 用户,结果如下:根
uid=0(root) gid=0(root) groups=0(root)
来自 root 用户的问候
此外,为了使用 sudo,我必须使用 echo 'mynormaluserpassword' | 输入密码(除非您将其配置为无密码工作)。 sudo -S
然后我使用 sh -c 'whoami; ID; echo Hello from root user'
传递我需要以 root 身份执行的所有命令。
所以你需要执行的任何根命令都可以在这里添加 echo 'mynormaluserpassword' | sudo -S sh -c 'echo Hello from root user'"
关于bash - shell脚本如何返回本地用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090528/