2

我正在尝试cslogin从 PowerShell 在 Linux 机器上执行应用程序控制台命令 ()。我使用来自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,但未进行身份验证

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

4

2 回答 2

1

您只导入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,您可以使用-tswitch 强制 TTY:

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

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

于 2015-04-28T06:24:51.470 回答
0

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

您可以让 plink 在 Linux 服务器上运行一个脚本,或者使用-m开关 get plink 来读取命令列表来驱动文件。

或者,您可以设置一个 putty 保存的会话,然后运行 ​​plink 以获取交互式会话,但是当它尝试解释 plink 的输出时,您可能会在 powershell 命令窗口中遇到一些奇怪的问题。

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

于 2015-04-27T22:36:49.260 回答