通过PowerShell进行SSH


54

是否可以在PowerShell中打开SSH会话?目前,我使用PuTTY,但是如果不需要的话,会很好。


1
我知道它不是本机支持的,但是我也希望看到一个解决方案。
egorgry 2010年

5
仅从命令行调用putty.exe(或plink.exe)有什么问题?
哈维尔

4
哈维尔:让我们从plink 只是一个SSH客户端开始,完全缺乏终端仿真功能的情况开始。
grawity 2010年

+1,我想看看自己的解决方案。在大多数情况下,我非常讨厌腻子。(SecureCRT用户)
Urda 2010年

1
微软宣布了SSH未来支持:blogs.msdn.com/b/powershell/archive/2015/06/03/...
西北。

Answers:



9

我基于CodePlex上的SSH.NET库编写了一个模块,用于处理PowerShell中的SSH会话。它具有New-SshSession来创建连接(支持使用不同凭据的多个目标),然后您可以使用Invoke-SshCommand对任意数量的目标主机运行命令。甚至还有一个Enter-SshSession,它具有非常基本的交互式外壳。

文章在这里

乔基姆



2

我仍在发布此问题的答案,因为我发现接受的答案根本不适合我的需求(仅付费解决方案或不能很好地处理终端的解决方案)。

因此,解决此问题的明显方法是安装cygwin。如果只想使用ssh,请进行最小化安装,但是由于powershell提供了与* nix shell的基本兼容性(基本命令仍然存在,目录中有“ /”等),因此在Powershell中使用cygwin的东西确实是可能的。

Cygwin在这里安装


1
西格温?eck!可能还会启动虚拟机...
Urda 2010年

怎么会这样 ?ssh是Windows编译的可执行文件。如果您不想与unix-y的东西进行互操作,那么您必须为此安装一些库就不足为奇了。
raph.amiard 2010年

请参阅Ameer Deen的答案,我认为这是最好的解决方案,并且效果很好。
Hosh Sadiq

1
@HoshSadiq,来自Windows的OpenSSH描述:“用于最小化Cygwin环境安装的安装程序,适用于在Windows平台上运行OpenSSH服务器。”
Douglas Ludlow 2014年


1

如果目标计算机是Windows机器,则可以使用PowerShell Remoting

绝对不同于SSH。有优点(通过导线带回对象!)和缺点(如果目标是Linux会怎样?)。




1

获得一个很好的本地ssh客户端的一种方法是从GitHub(https://windows.github.com/)安装git 。

它会创建一个posh-git窗口的快捷方式,并正确设置所有路径以在powershell中使用git。路径中会自动附带ssh和scp二进制文件。

我不确定它是什么实现,但是它确实具有Linux的感觉,即它不感觉它是基于.Net或使用Powershell Commandlet的。

它正在获取我在$ home / .ssh /中以openssh格式配置的私钥,也许有人可以确认。感觉像是openssh。

为了使它更好,我通过在$ profile中执行以下操作将其集成到我的常规powershell配置文件中。这意味着我不必使用github的快捷方式。

. (Resolve-Path "$env:LOCALAPPDATA\GitHub\shell.ps1") . (Resolve-Path "$env:LOCALAPPDATA\GitHub\PoshGit_*\profile.example.ps1")


1

Posh-SSH是Poswershell Magazine的免费模块,适用于Powershell 3.0及更高版本。

可从http://www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module/获得

上面的链接提供了完整的文档。在脚本中,您实际上并不需要交互式连接,因此需要两个步骤。1创建会话。第二次发送命令。

$ServerConnection = New-SSHSession -KeyFile $keyLocation -ComputerName $sshComp -Credential $mycreds -AcceptKey

您创建的第一个会话的索引为0。

Invoke-SSHCommand -Index 0 -Command "some command to run over ssh"

最佳实践是在执行命令之前将连接创建置于try catch中并验证会话是否存在。这使得从Powershell脚本内部与Linux服务器进行交互可以很好地进行。


-2

SSH和SFTP无疑是安全远程访问应用程序中的行业标准。幸运的是,建立连接的过程可能非常快捷简便。不幸的是,事实是有很多可能会浪费时间进行故障排除。

不幸的是,Windows上没有标准的ssh客户端或守护程序软件。

这导致了一个或多或少怪异的实现,开放源代码,免费软件,共享软件等的动物园……有些有时无法正常工作。

在Windows中,这是一件赚钱的事情。Microsoft只是不想让许多用户轻松连接到一台许可的计算机。他们想出售自己的解决方案。因此,他们不提供本地ssl。

cygwin是最好的解决方案。

putty / plink / winscp作为客户端软件。脚本编写也可以。

有用于Windows集成的ssh守护进程,但是解决方案或多或少是不稳定的。

在windwos上运行ssh守护进程最稳定的方法是在Linux VM内运行它,这可以通过一个小型的Linux发行版来实现。


4
这并不能真正回答 OP的问题。您可以编辑问题以表明cygwin为什么可以解决OP提出的问题吗?
我说恢复莫妮卡2014年

除了与PowerShell相关的解决方案外,OP不要求其他替代方案。
cychoi 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.