2016-01-22 85 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