我正在尝试从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而没有 认证
此时如果我按下回车键,我就能得到应用程序提示符,这就是我想要的。我试图理解为什么我的脚本会挂起,我该如何解决这个问题。
答案 0 :(得分: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,您可以使用-t
开关强制TTY:
$user = "user"
$password = "pass"
$hostname = "192.168.1.X"
plink.exe -ssh -l $username -pw $password $hostname -t "cslogin"
答案 1 :(得分:0)
据我所知,你实际上并没有在这里使用ssh.net。当然,您导入模块但不是使用New-SSHSession
或Invoke-SSHCommand
cmdlet,而是运行plink连接并运行cslogin
。我承认我没有听说过Linux命令,但请记住,plink希望通过SSH连接,执行命令并断开连接 - 这样你就不会得到交互式提示。
您可以让plink在Linux服务器上运行脚本,或者使用-m
开关获取plink来读取无人机文件的命令列表。
或者你可以设置一个putty保存的会话,然后运行plink来获得交互式会话,但是当你试图解释plink的输出时,你可能会在powershell命令窗口中遇到一些奇怪的东西。
有关详细信息,请参阅this link