我试图使用Plink连接到远程UNIX服务器,su
连接到另一个用户(没有密码),最后执行一些命令。
$commands = @(
"su - $UNIXUSER;",
"id"
)
echo y | plink -ssh $SERVER -l $USER -pw $PWD $commands
当我使用PowerShell执行上面的代码时,我收到一条消息,说他能够更改用户,但是当我执行命令id
时,他返回我首先登录的id,而不是{ {1}}用户。
如何在su
用户中使用Plink执行命令?
答案 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。提供命令可能比使用字符串更优雅。)