从PowerShell重新执行Linux应用程序



我正在尝试从PowerShell在Linux机器上执行应用程序控制台命令(cslogin)。我使用 SSH.NET 年的 SSH 模块访问 Linux 服务器。以下是我的脚本的快照,我能够建立 ssh 会话。

Import-Module SSH-Sessions
$user     = "user"
$password = "pass"
$hostname = "192.168.1.X"
C:plink.exe -ssh -l $username -pw $password $hostname "cslogin"  

但是,一旦执行了cslogin命令,脚本就会挂起并显示以下消息:

SEC054 设备已连接到伪 tty 或从伪 tty 断开连接,而没有 认证

此时,如果我按回车键,我就能得到应用程序提示,这就是我想要的。 我试图了解为什么我的脚本挂起以及如何解决此问题。

你只导入SSH-Sessions模块,而不实际使用它。然后运行 PLink,这与 SSH.NET 完全无关。


纯 SSH.NET 解决方案如下:

Import-Module SSH-Sessions
New-SshSession -ComputerName "192.168.1.X" -Username "user" -Password "pass"
Invoke-SshCommand -InvokeOnAll "cslogin"

除此之外,您的 PLink 解决方案也这样做。由于它不起作用,因此上面的 SSH.NET 解决方案也可能不起作用。

您的实际问题是应用程序(cslogin)需要一个交互式终端(TTY)。默认情况下,PLink 不会分配一个。我相信 SSH.NET 也没有。使用 PLink,您可以使用-t开关强制 TTY:

$user     = "user"
$password = "pass"
$hostname = "192.168.1.X"
plink.exe -ssh -l $username -pw $password $hostname -t "cslogin"  

请参阅使用命令行连接工具 Plink。

我所知,您实际上并没有在这里使用 ssh.net。当然,您可以导入模块,但不要使用New-SSHSessionInvoke-SSHCommand cmdlet,然后运行 plink 以连接并运行cslogin。我承认我没有听说过那个 Linux 命令,但请记住,plink 希望通过 SSH 连接,执行命令并断开连接 - 所以你不会得到交互式提示。

您可以让 plink 在 Linux 服务器上运行脚本,也可以使用 -m 开关 get plink 读取命令列表 无人机文件。

或者,您可以设置一个腻子保存的会话,然后运行 plink 以获取交互式会话,但是当 powershell 命令窗口尝试解释 plink 的输出时,您可能会在 powershell 命令窗口中出现一些奇怪之处。

有关更多信息,请参阅此链接

最新更新