Executando o script bash em uma máquina remota do Windows

4

Estou planejando executar um script bash em um sistema Windows remoto da minha máquina Linux local. Para este propósito, eu terei que entrar na máquina Windows a partir do local e depois executar o script bash.

Primeiro de tudo, isso é possível? Se sim, então como pode ser feito?

    
por Mandar Shinde 22.03.2014 / 06:07

4 respostas

10

Isso pode ser feito instalando o Cygwin e um servidor openssh em sua máquina Windows. O Cygwin virá com o bash, que pode executar seu script, e o openssh pode ser instalado no Cygwin e permitirá que você faça o login na máquina do Windows remotamente. Antes de fazer login, você pode transferir seu script para a máquina Windows usando scp e, em seguida, executá-lo diretamente com o ssh.

O openssh pode ser instalado usando o programa de instalação do cygwin. Para instruções mais detalhadas, veja link

    
por 22.03.2014 / 06:16
2

Concordo com @slm que isso é algo de uma questão limítrofe. A verdade é que o Windows incorpora seus próprios protocolos de acesso remoto à medida que seu sistema Unix incorpora os seus próprios protocolos de acesso remoto. O Microsoft Powershell amadureceu bastante desde que foi introduzido no Vista, e pode fazer a maioria, se não todas as coisas que você espera que um script de shell faça por você no seu sistema Windows. Por exemplo, de acordo com technet :

The Windows PowerShell remoting features are supported by the WS-Management protocol and the Windows Remote Management (WinRM) service that implements WS-Management in Windows. Computers running Windows 7 and later include WinRM 2.0 or later. On computers running earlier versions of Windows, you need to install WinRM 2.0 or later as appropriate and if supported. Currently, remoting is supported on Windows Vista with Service Pack 1 or later, Windows 7, Windows Server 2008, and Windows Server 2008 Release 2. 

É claro que fazer uso disso de um cliente Linux apresenta alguns problemas, mas espero que uma máquina virtual resolva a maioria deles, ou até mesmo apenas um netcat ou ssh proxy. Contribuindo 5 minutos e o uso de um mecanismo de busca para minha leve curiosidade e agora sei do projeto Pash , embora eu faça não há alegações sobre sua utilidade.

ATUALIZAÇÃO:

No decorrer de mais uma vez entreter essa curiosidade leve, revisitei o Pash sourceforge page e navegou um pouco mais. Ao fazer isso, percebi que os PROJETOS RECOMENDADOS incluídos incluíam não apenas o winexe que @slm recomenda, mas outro que eu nunca tinha ouvido falar chamado win-bash . A partir da descrição:

Unlike other bash ports for Windows (e.g. the cygwin bash ), the win-bash needs no special environment or DLLs. There is just one binary and that's it.

The goal of the win-bash project is to finish the port to Windows and provide a fully-functional bash.exe binary for Windows NT and derived systems. win-bash can be used as an input shell, as well as an interpreter to run UN*X shell scripts.

O que eu acho significativo sobre o que foi dito em relação a essa pergunta é sua natureza autônoma. Se não houver dependências de biblioteca ou registro, um executável do Windows poderá ser executado remotamente - por exemplo, a partir de um compartilhamento de arquivos - sem a instalação. Portanto, é possível que você possa se conectar remotamente a uma máquina usando protocolos nativos do Windows (possivelmente também com ou incluindo winexe ), executar um powershell ou net use comando para mapear um compartilhamento de arquivo, executar seu script de shell via win-bash, , então desmapear o compartilhamento e encerrar a conexão sem ter que copiar nem mesmo um único arquivo para o host remoto.

Eu digo que é concebível, mas funciona? Eu não sei, embora eu possa descobrir.

Eu gosto de manter uma imagem atual win pe na partição EFI do meu sistema para que ela esteja disponível para rEFInd (e inicializável, obrigado para um iPXE hack ou dois). Até agora eu o personalizei apenas para bloquear o início da instalação padrão do Windows e configurá-lo para abrir um prompt cmd intermediado por netcat, porque cygwin pareceu-me ser uma grande tarefa para pouco retorno, mas agora a minha curiosidade anteriormente branda está crescendo ... Eu provavelmente voltarei com um relatório sobre minha experiência depois de adicioná-la ao meu pe imagem.

END UPDATE

@slm menciona winexe , que eu nunca tinha ouvido antes, embora eu esteja interessado agora. Ele também menciona wmic como uma ferramenta que você pode usar, e é uma ferramenta que eu mesmo usei com frequência - ela concede um acesso bastante poderoso ao backend do Registro usando a sintaxe semelhante a SQL.

Eu sei que se você deseja executar .cmd scripts baseados em regras específicas, há o Gerenciador de Tarefas do Windows e a Política de Grupo do Windows, os quais, como eu acredito, você pode influenciar pelo menos até certo ponto via wmic.

Por fim, direi que o código de portabilidade de um sistema operacional para outro não é feito com a frequência que gostaríamos por uma razão: é problemático por sua própria natureza. Diferentes sistemas operacionais se comportam de maneira diferente, pelo menos porque são diferentes. ssh por exemplo, pelo menos na minha experiência, era incapaz de lidar com as permissões graduais do Windows e exigia acesso em nível de sistema ou simplesmente não funcionava, embora netcat pareceu aceitar o nível de permissões da conta de usuário sob a qual eu o executei. Powershell, como eu mencionei acima, pode ser uma ferramenta extremamente tediosa se usada para analisar strings, como você pode estar acostumado a fazer em um ambiente Unix, porque trata tudo como um objeto em si mesmo. Então boa sorte.

    
por 22.03.2014 / 22:05
1

Você usaria ssh para acessar um servidor ssh remoto e executar um comando.

Por exemplo

ssh [email protected] command

Se você quiser saber como configurar uma máquina Windows como um servidor ssh, essa é uma pergunta para o fórum do Windows. No entanto, a sugestão de todos para usar o cygwin e o open ssh é uma boa ideia.

    
por 22.03.2014 / 09:03
1

Eu provavelmente dissuadiria você de usar o Cygwin apenas para usar um script Bash que provavelmente precisará ser altamente personalizado de qualquer forma, para que ele possa ser executado sobre o Cygwin + Windows. Isso parece muito com um problema XY .

Em vez disso, você seria mais bem-informado ao direcionar a execução de um script que foi escrito em uma linguagem de script nativa do Windows. Há uma grande variedade de opções no Windows usando qualquer coisa, desde um simples arquivo .cmd até algo em um script VB.

Qualquer uma dessas soluções pode ser executada a partir do seu sistema Linux usando winexe , exigindo que você não precise instalar qualquer coisa no sistema Windows além de garantir que eles tenham acesso ao seu script.

Exemplos

$ winexe -U "<user>%<pwd>" //192.168.1.2 'wmic bios get serialnumber'
$ winexe -U "<user>%<pwd>" //192.168.1.2 'C:\path\to\script.cmd'

Referências

por 22.03.2014 / 19:42