SSH via PowerShell


54

É possível abrir uma sessão SSH no PowerShell? Atualmente eu uso o PuTTY, mas seria bom se isso não fosse necessário.


11
Eu sei que não é suportado nativamente, mas eu adoraria ver uma solução também.
egorgry

5
o que há de errado em apenas chamar putty.exe (ou plink.exe) na linha de comando?
Javier

4
Javier: Vamos começar com o plink sendo apenas um cliente SSH e sem os recursos de emulação de terminal.
grawity

+1, eu gostaria de ver uma solução. E na maioria das vezes eu odeio tanto a massa de vidraceiro. (Usuário SecureCRT)
Urda

11
A Microsoft anuncia suporte futuro para SSH: blogs.msdn.com/b/powershell/archive/2015/06/03/…
nw.

Respostas:



9

Eu escrevi um módulo para lidar com sessões SSH do PowerShell, com base na biblioteca SSH.NET encontrada no CodePlex. Possui New-SshSession para criar conexões (vários destinos usando credenciais diferentes são suportadas) e, em seguida, você pode usar o Invoke-SshCommand para executar comandos em qualquer número de hosts de destino. Existe até um Enter-SshSession que possui um shell interativo muito básico.

O artigo está aqui .

Joakim


6

Faça o download do OpenSSH para Windows e escolha instalar apenas o cliente durante a instalação. O instalador inteiro, incluindo o servidor, tem menos de 3 MB e o cliente funciona bem.


2
Existem muitos avisos nesse projeto sobre o instalador pisar na variável System PATH no Windows 7 e 8 - tenha cuidado!
Patrick M

2

Ainda estou postando uma resposta a esta pergunta, porque achei a resposta aceita que não atendia às minhas necessidades (apenas uma solução paga ou outra que não lida bem com o terminal).

Portanto, a solução óbvia para esse problema é instalar o cygwin. Faça uma instalação mínima se você quiser apenas o ssh, mas como o powershell fornece um nível básico de compatibilidade com shells * nix (comandos básicos ainda estão lá, "/" para diretórios etc.), é realmente possível usar o cygwin no Powershell.

Cygwin instale aqui


11
Cygwin? Bleck! Poderia muito bem acender um VM ...
Urda

Como assim ? ssh é um executável compilado pelo Windows. Se você não deseja interoperar com coisas unix-y, não deve ser surpresa que você precise instalar algumas bibliotecas para isso.
raph.amiard

Veja a resposta de Ameer Deen, acho que é a melhor solução aqui e funciona muito bem.
Hosh Sadiq

11
@HoshSadiq Na descrição do OpenSSH para Windows: "Um instalador para uma instalação mínima do ambiente Cygwin, adequado para executar um servidor OpenSSH na plataforma Windows".
Douglas Ludlow


1

Se a máquina de destino for uma caixa do Windows, você poderá usar o PowerShell Remoting .

Definitivamente, não é o mesmo que SSH. Existem profissionais (trazendo objetos de volta pela rede!) E contras (e se o destino for o Linux?).




1

Uma maneira de obter um cliente ssh nativo muito bom é instalar o git no GitHub ( https://windows.github.com/ ).

Ele cria um atalho para uma janela elegante com todos os caminhos definidos corretamente para usar o git no PowerShell. Isso vem automaticamente com os binários ssh e scp no caminho.

Não tenho certeza de qual é a implementação, mas tem uma sensação semelhante ao Linux, ou seja, não parece que seja baseada em .Net ou usa comandos do PowerShell.

Ele está pegando a chave privada que eu configurei em $ home / .ssh / no formato openssh e talvez alguém possa confirmar. Parece que é openssh.

Para torná-lo ainda melhor, integrei-o ao meu perfil normal do PowerShell, fazendo o seguinte no meu perfil $. Isso significa que não preciso usar o atalho do github.

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


1

Posh-SSH É um módulo gratuito da Revista Poswershell que funciona para o Powershell 3.0 e superior.

Está disponível em http://www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module/

A documentação completa é fornecida no link acima. Em um script, você realmente não deseja conexões interativas, portanto, são duas etapas. Primeiro crie a sessão. 2º enviar comandos.

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

A primeira sessão que você criar terá um índice de 0.

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

É uma prática recomendada colocar a criação da conexão em uma captura de tentativa e validar a existência da sessão antes de executar um comando. Isso faz com que interagir com servidores Linux de dentro de um script do PowerShell funcione bem.


-2

SSH e SFTP, sem dúvida, representam o padrão do setor em aplicativos de acesso remoto seguro. Felizmente, é possível que o estabelecimento de uma conexão seja realmente rápido e fácil. Infelizmente, a verdade é que existem muitas possibilidades de perder tempo com a solução de problemas.

Infelizmente, o Windows não possui um cliente ssh padrão ou um software deamon a bordo.

Isso resulta em um zoológico de implementações mais ou menos esquisitas, código aberto, freeware, shareware e assim por diante ... algumas vezes, algumas vezes não.

Dentro das janelas, é uma coisa de dinheiro. A Microsoft simplesmente não deseja que muitos usuários se conectem a 1 computador com facilidade. Eles querem vender suas próprias soluções. Então eles não oferecem SSL nativo.

O cygwin é a melhor solução disponível.

putty / plink / winscp como software cliente. Também está ok para scripts.

existem ssh daeamons para integração com o Windows, mas as soluções são mais ou menos instáveis.

a maneira mais estável de ter o ssh deamon em windwos rodando é executá-lo dentro de uma VM Linux, pode ser realizado com uma pequena distribuição Linux.


4
Isso realmente não responde à pergunta dos OPs. Você pode editar sua pergunta para indicar por que o cygwin é uma solução para a pergunta feita pelo OP?
Eu digo Reinstate Monica

O OP não está pedindo outras alternativas além das soluções relacionadas ao PowerShell.
22614 cychoi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.