bash - shell脚本如何返回本地用户?

标签 bash shell hadoop terminal snort

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

解释:

  1. 我使用名为 mostafa 的普通用户登录
  2. 我执行了 whomai 然后打印了这些结果的 id:

    莫斯塔法 uid=1033(mostafa) gid=1033(mostafa) groups=1033(mostafa)

  3. 我执行了另外 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/

相关文章:

java - 树莓派和 log4j

java - 我需要什么 hadoop jar 来获得 WeightAdjuster 界面

amazon-web-services - 如何在亚马逊上启动Emr集群?

python - 如果输出有字符,我需要运行 bash 命令;如果输出为空,我需要运行其他命令

linux - 将输出重定向到变量指定的文件

linux - 在我的 bash 脚本方面需要帮助

Linux:创建随机目录/文件层次结构

bash - 从 MATLAB 调用 Anaconda 环境 : Conda Command Not Found

Python 将所有其他内容压缩到同一文件中

Hadoop 与 NoSQL 数据库