如何在shell脚本中返回到本地用户?

vsikbqxv  于 2021-06-01  发布在  Hadoop
关注(0)|答案(3)|浏览(626)

我有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

但它也打开了当前用户不正常的一个。
有什么建议吗?

mum43rcc

mum43rcc1#

您可以通过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 打印这些结果: 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'"

sf6xfgos

sf6xfgos2#

我不是100%确定我正确理解了你的描述,但我想你想说的是命令的远程部分没有发生?/home/hduser/hadoop是您的第二个脚本吗?
如果是,则应执行以下操作:

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 hadoop ssh -o StrictHostKeyChecking=no hduser@dalya-B5400 /home/hduser/hadoop

问题是,您只需连接到远程计算机,它就不知道本地脚本中的内容:)

mbyulnm0

mbyulnm03#

我通过以下步骤解决了这个问题:
1-添加sudo到snort命令而不登录到root用户,这样我以后就不需要注销。

sudo snort -dev -n 20 -l /home/hduser/log9 -b -c /etc/snort5/snort.conf
sudo chmod a+rwx /home/hduser/log9/snort.log.*
sudo tcpdump -n -tttt -r /home/hduser/log9/snort.log.* > /home/hduser/log9/bigfile2.txt

要在没有密码的情况下运行它,请将以下行添加到visudo:

hduser ALL=(ALL) NOPASSWD: ALL

2-在这一点上,它一直工作,直到我将文件发送到hadoop,它给出的消息是:

nameNode in safe mode

我发现问题是因为作业在namenode启动后脱离安全模式之前运行。因此,在执行脚本前几分钟我启动了hadoop进程,效果很好。

相关问题