无法在PowerShell

时间:2016-01-22 12:09:51

标签: powershell putty su plink

我试图使用Plink连接到远程UNIX服务器,su连接到另一个用户(没有密码),最后执行一些命令。

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

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

当我使用PowerShell执行上面的代码时,我收到一条消息,说他能够更改用户,但是当我执行命令id时,他返回我首先登录的id,而不是{ {1}}用户。

如何在su用户中使用Plink执行命令?

1 个答案:

答案 0 :(得分:1)

这不起作用。

我很惊讶您甚至已经执行id

PowerShell有效地执行此操作。

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

首先,这是一种错误的语法。

即使它是正确的,您只能在plink命令行上提供单个命令字符串。虽然您可以将使用;&的多个shell命令组合到一个简单的命令字符串,但这不能与su一起使用。第二个命令ls不再是主shell的命令。这是su的内部命令,即完全不同的流/输入/无论你怎么称呼它。

您需要做的是模拟用户键入命令,以便第一个命令由主shell处理,第二个命令由主shell执行su。您只能通过输入重定向来实现。

你可以这样做:

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

添加-T以禁用pty分配(即获取非交互式shell),以获取-m的行为(这意味着-T)。

(我不做PowerShell。提供命令可能比使用字符串更优雅。)