2014-12-07 127 views
2

我需要運行批處理才能登錄到服務器,獲取sudo su - username並運行特定命令。如何在sudo命令後執行多個命令

我嘗試下面的代碼:

putty [email protected] -pw password -m myshell.sh 

myshell.sh:

#!/bin/sh 
sudo su - username 
cd to particular folder 
then tail a file 

我得到的sudo的,但在那之後的腳本stucks直到我退出。

+0

相反,如果每個命令都作爲sudo(使用密碼)運行,請以root用戶身份登錄並運行所有命令而不使用sudo。 – alfasin 2014-12-07 06:31:56

+1

@阿爾巴辛:誰說他有ROOT權限? – tvCa 2014-12-07 11:56:54

+0

除非需要CD,否則TAIL文件最好,在TAIL命令中提供完整路徑。假設目錄不存在,你會在屏幕上顯示哪些錯誤信息?他會聲明文件丟失,但可能不會顯示他在另一個(錯誤的)目錄中查找該文件。也有可能文件存在於錯誤的目錄中。 – tvCa 2014-12-07 11:59:08

回答

4

你可以使用sh -c然後在命令之間使用分號,但是我會考慮在註釋中提出的解決方案,但是隻需要將整個腳本作爲sudo運行即可。

sudo sh -c "cd /tmp;pwd;cd /dev;pwd"" 
+0

sh -c提示輸入我沒有的密碼。 我使用「sudo su - username」並且不要求輸入密碼,那麼我可以執行我的命令。但用sudo運行腳本提示輸入密碼。 – 2014-12-07 07:07:11

+0

@SurajModi:它要求輸入哪個密碼? ------''sh -c'不應該要求輸入任何密碼,'sudo'會根據所使用的參數和'/ etc/sudoers'中的配置來請求**您的**密碼。 – pabouk 2015-08-06 08:47:32

1

更新我的shell文件,下面的命令和它的工作:

#!/bin/sh 
sudo su - username << block 
cd /; 
tail filename; 
block 

所有的命令都被寫入塊,並通過「;」分隔

+0

更清潔和更安全的方法是告訴'sudo'直接以用戶'username'運行命令,而不是以'root'運行'su'。此外,您不需要使用'cd',只需指定文件的完整路徑即可。根據你的例子,它會是:'/ filename'。 ------這是首選命令:'sudo -u username tail/filename'。不幸的是,這種方式使用'sudo'的可能性可能在'/ etc/sudoers'中被禁用。 ------注意:在腳本中,當用換行符分隔時,不需要用';'分隔命令。 – pabouk 2015-08-06 09:05:07