使用 Plink 执行命令不起作用,但在 PuTTY 中可以

Executing command using Plink does not work, but does in PuTTY

我正在尝试创建一个 PowerShell 脚本以通过 SSH 连接到 Raspberry Pi 并执行一些命令。我正在使用 Plink 通过命令行通过 SSH 连接到 Pi。但是我必须通过 SSH 连接到在 lshell 中运行的 Pi 用户。我可以零问题地将 PuTTY 放入 Pi,但是当使用 Plink 时,我收到一条错误消息,指出我正在使用的命令被禁止。我正在尝试使用 su,它在通过非 Plink 使用 PuTTY 时有效。

我得到的错误如下:

plink : *** forbidden char/command over SSH: "su"
At line:1 char:1
+ plink -ssh pi@<IP> -pw <password> su
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (*** forbidden c... over SSH:         
"su":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

This incident has been reported.

感谢您提供的任何帮助。

与使用 PuTTY 登录并键入 command:

相比,使用 plink ... command 时有两个不同之处
  1. plink ... command 打开 运行 命令的“执行”通道。当 PuTTY 使用登录 shell 打开“shell”频道时,只有 shell 运行 命令。

  2. plink ... command 默认打开一个非交互式会话(无 TTY)。当 PuTTY 打开一个交互式会话(使用 TTY)时。


在 PuTTY 中测试 Plink 行为:

  1. 输入命令连接 > SSH > 远程命令
  2. 检查连接 > SSH > TTY > 不要分配伪终端

相反,要在 Plink 中测试 PuTTY 行为,请使用:

echo command | plink ...

同时检查 Plink -T/-t switches

这在 2 中的行为与 PuTTY 相同,但在 1 中则不同:

plink -t ... command

相反,这在 1 中的行为与 PuTTY 相同,但在 2 中则不同:

echo command | plink -T ...

试验这些以找出导致您的特定问题的原因。

解决方法见Script via Plink in .bat behaves differently