我有ubuntu 15.10操作系统。我编写了一个shell脚本来执行以下多个命令:
“登录到根目录”root@dalya-b5400:/home/hduser“并进入snort目录,打开ids模式,将捕获的数据包转换为文本格式,最后从该目录和根目录注销,然后登录到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用户,但在此之后退出,而不执行其后面的rest命令。
我也试着从当前调用第二个shell脚本,但是它也给出了相同的结果并且没有打开普通用户。
我的名为snort command的主shell脚本及其子脚本包含以下内容:
# !/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
但它也打开了当前用户不正常的一个。
有什么建议吗?
3条答案
按热度按时间mum43rcc1#
您可以通过ssh使用普通用户登录,然后以root用户身份执行命令(您需要确保您的普通用户处于
sudoers
)例如,使用以下命令:结果如下:
说明:
我用一个叫
mostafa
我处决了whomai
那么id
打印这些结果:mostafa 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)Hello from root user
另外,为了使用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'"
sf6xfgos2#
我不是100%确定我正确理解了你的描述,但我想你想说的是命令的远程部分没有发生?/home/hduser/hadoop是您的第二个脚本吗?
如果是,则应执行以下操作:
问题是,您只需连接到远程计算机,它就不知道本地脚本中的内容:)
mbyulnm03#
我通过以下步骤解决了这个问题:
1-添加sudo到snort命令而不登录到root用户,这样我以后就不需要注销。
要在没有密码的情况下运行它,请将以下行添加到visudo:
2-在这一点上,它一直工作,直到我将文件发送到hadoop,它给出的消息是:
我发现问题是因为作业在namenode启动后脱离安全模式之前运行。因此,在执行脚本前几分钟我启动了hadoop进程,效果很好。