从PowerShell远程执行Linux应用程序
我试图在PowerShell的Linux设备上执行应用程序控制台命令(从PowerShell远程执行Linux应用程序,linux,powershell,ssh,plink,ssh.net,Linux,Powershell,Ssh,Plink,Ssh.net,我试图在PowerShell的Linux设备上执行应用程序控制台命令(cslogin)。我使用来自的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
)。我使用来自的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,但没有
鉴定
在这一点上,如果我点击回车键,我就能得到应用程序提示,这就是我想要的。我试图理解为什么我的脚本会挂起,以及如何绕过这个问题 据我所知,您实际上并没有在这里使用ssh.net。当然,您可以导入模块,但不必使用
New SSHSession
或Invoke SSHCommand
cmdlet,而是可以运行plink进行连接并运行cslogin
。我承认我没有听说过这个Linux命令,但请记住,plink希望通过SSH连接,执行命令并断开连接-因此您不会得到交互式提示
您可以让plink在Linux服务器上运行脚本,也可以使用-m
开关让plink读取文件中的命令列表
或者,您可以设置putty保存的会话,然后运行plink以获得交互式会话,但在powershell命令窗口尝试解释plink的输出时,您可能会在该窗口中发现一些异常
有关更多信息,请参见您只导入
SSH会话
模块,而不实际使用它。然后运行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"
请参阅。对此感到抱歉,我们正在尝试将此功能与SSH模块和plink一起使用,但忘记删除导入模块SSH会话代码。还尝试了plink-t参数,得到了此->bash:cslogin:command not found如果您使用SSH终端客户端(例如PuTTY)登录,是否可以执行
cslogin
?是的,我可以,无论我使用putty、plink还是SSH模块,我仍然会收到“SEC054设备已连接到或断开连接到伪tty而未进行身份验证”消息。我可以通过点击回车键来传递消息。我想这是一个可能的解决方案,如果我可以搜索消息的输出,然后切换到下一行代码。这篇文章与此类似,可能很有用-你想在这里实现什么,而不是更好地使用putty?