无法在 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。可能有比使用字符串更优雅的方式来呈现命令。)
我正在尝试使用 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。可能有比使用字符串更优雅的方式来呈现命令。)