无法在 PowerShell 中使用 Plink 对其他用户 (su) 运行 命令

Can't run commands on other user (su) using Plink in PowerShell

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

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

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

当我使用 PowerShell 执行上面的代码时,我收到一条消息说他能够更改用户,但是当我执行命令时 id 他 returns 我在第一名,不是 su 用户。

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

这行不通。

我很惊讶你竟然执行了 id

PowerShell 有效执行此操作。

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

首先这是一个错误的语法。

即使它是正确的,您也可以在 plink 命令行上只提供一个命令字符串。虽然您可以使用 ;& 将多个 shell 命令组合成一个简单的命令字符串,但不能使用 su。第二个命令 ls 不再是主命令 shell 的命令。这是 su 的内部命令,即完全不同的 stream/input/whatever 你称之为。

您需要做的是模拟用户键入命令,以便第一个命令由 main shell 处理,第二个命令由 su 从 main [=] 执行45=]。您只能通过输入重定向来做到这一点。

你可以这样做:

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

添加了 -T 以禁用 pty 分配(即获得 non-interactive shell),以获得 -m 的行为(这意味着 -T).

(我不使用 PowerShell。可能有比使用字符串更优雅的方式来呈现命令。)