2016-01-22 86 views
0

我試圖使用Plink連接到另一個用戶(不帶密碼)的遠程UNIX服務器,su並最終執行一些命令。無法在PowerShell中使用Plink在其他用戶(su)上運行命令

$commands = @(
"su - $UNIXUSER;", 
"id" 
) 

echo y | plink -ssh $SERVER -l $USER -pw $PWD $commands 

當我執行上面使用PowerShell中的代碼中,我得到一個消息,說他是能夠改變的用戶,但是當我執行命令id他回來我首先登錄的ID,而不是su用戶。

如何在su用戶中使用Plink執行命令?

回答

0

這是行不通的。

我很驚訝你甚至可以執行id

PowerShell有效地執行此操作。

plink -ssh $SERVER -l $USER -pw $PWD "su - $UNIXUSER;" id 

首先,這是一個錯誤的語法。

即使它是正確的,您只能在plink命令行上提供單個命令字符串。雖然可以使用;&將多個shell命令組合到一個簡單的命令字符串中,但不能與su一起使用。第二個命令ls不再是主shell的命令。這是su的一個內部命令,即完全不同的流/輸入/無論你怎麼稱呼它。

您需要做的是模擬用戶輸入命令,以便第一個命令由主外殼處理,第二個命令由主外殼執行su。你只能通過輸入重定向來做到這一點。

你可以這樣做:

"su - $UNIXUSER`nid`nexit`nexit`n" | plink -ssh $SERVER -l $USER -pw $PWD -T 

-T加入禁用PTY分配(即獲得一個非交互的shell),得到的-m行爲(這意味着-T)。

(我不這樣做的PowerShell。有可能帶來比使用字符串命令一個更優雅的方式。)

+0

它的工作原理,謝謝! – Ricardo