2017-05-20 96 views
0

我有Ubuntu 15.10操作系統。 我寫了一個shell腳本來執行其多個命令:如何在shell腳本中返回本地用戶?

登錄到根「根@ dalya-B5400:/首頁/ 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」

我的腳本工作,直到日誌從根到Hadoop的用戶,在這裏,我着重一個問題,我用這個命令(一個在時間):

$ su - & sshpass -p password ssh -o StrictHostKeyChecking=no [email protected] 
$ sudo -iu hduser 
$ sudo su - hduser 

它記錄到hadoop用戶,但之後退出而不執行後面的其餘命令。

另外我嘗試從當前調用第二個shell腳本,但它也給出相同的結果,並且不打開普通用戶。

我的主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 [email protected] 
/home/hduser/hadoop 

和名爲Hadoop的第二shell腳本,幷包含:

#!/bin/bash 
/usr/local/hadoop/bin/start-all.sh 
hadoop fs -put /home/hduser/log9/bigfile2.txt user/hduser/li 

而且我試圖打開來自新終端當前:

$ gnome-terminal 

但它也打開當前用戶不正常。

有什麼建議嗎?

回答

1

我解決了這個問題,這個步驟:

1加sudo沒有登錄嗤之以鼻命令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超出安全模式之前,Job正在運行。所以我開始hadoop過程,然後在幾分鐘內完成劇本並且它的工作正常。

+0

提示:您可以也限制'hduser'的權限,而不是允許他在你的系統上使用任何命令。 –

+0

檢查這個[名稱節點處於安全模式。不能離開](http://stackoverflow.com/questions/15803266/name-node-is-in-safe-mode-not-able-to-leave),因爲它可能是類似的問題 –

+0

我也做過:hadoop dfsadmin -safemode離開,沒有解決問題,我現在通過在執行腳本之前運行hadoop來修復它。 – Dalya

0

我不是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 [email protected] /home/hduser/hadoop 

是,你只需要連接到遠程計算機的問題,因此它不知道的後:)

+0

是的,問題是我不能從這個腳本再次連接到本地機器上,我照你說的,但沒有奏效:L – Dalya

+0

@Dalya你知道爲什麼你不能再登錄到服務器?此命令是否返回任何錯誤? 'sshpass -p hadoop ssh -o StrictHostKeyChecking = no hduser @ dalya-B5400/home/hduser/hadoop ',你能手動執行相同的命令嗎? –

+0

@Mostafa Hussein,因爲我登錄到根目錄,之後我需要以本地用戶身份執行命令,所以我需要一種方法從shell腳本登錄到普通用戶,並繼續在shell.sshpass中執行後面的命令-p hadoop ssh -o StrictHostKeyChecking = no hduser @ dalya-B5400/home/hduser/hadoop,工作記錄到本地用戶並執行第二個腳本中的第一個命令,第二個命令給出以下消息:./ hadoop .sh:第3行:hadoop:找不到命令 我認爲它沒有以正確的方式登錄到本地用戶。 – Dalya

1

什麼是在本地腳本您可以登錄使用SSH,通過一個普通用戶,然後執行作爲根命令(你需要確保你的普通用戶是sudoers)使用下面的命令,例如:

sshpass -p 'mynormaluserpassword' ssh -o StrictHostKeyChecking=no [email protected] "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其中印刷這些結果:

    mostafa 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)

    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'"

+0

@達利亞你有沒有試過以上? –

+0

我想你寫的所有,沒有工作,我發現的主要問題是,因爲我在同一時間與作業執行開始的Hadoop,這導致錯誤在我script.Thank你的幫助:)) – Dalya

+0

如果您嘗試了相同的例子,因爲它應該工作,因爲我已經在服務器上測試過它,是的它可能不適用於不同的命令,因爲代碼本身可能需要在這種情況下進行一些修改(例如輸出重定向可能會導致我的代碼的問題,但我沒有在這種情況下測試過),對不起,我不能重複相同的步驟,因爲我想先了解一下您的情況:D,那麼您是否已經解決了問題,或者仍然是? –