从PowerShell执行Linux应用程序remotelly

时间:2015-04-27 12:48:15

标签: linux powershell ssh plink ssh.net

我正在尝试从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而没有   认证

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

2 个答案:

答案 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"  

请参阅Using the command-line connection tool Plink

答案 1 :(得分:0)

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

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

或者你可以设置一个putty保存的会话,然后运行plink来获得交互式会话,但是当你试图解释plink的输出时,你可能会在powershell命令窗口中遇到一些奇怪的东西。

有关详细信息,请参阅this link