
Estou escrevendo um aplicativo com um tipo de estrutura de cliente servidor. Para implementar a lógica,
- Preciso transferir uma pasta compactada para um servidor Windows,
- descompacte a pasta e
- em seguida, execute um determinado arquivo python dentro da pasta.
Estou tentando recriar as etapas manualmente, para poder refazê-las usando bibliotecas python (como paramiko
e zipfile
/ou outras bibliotecas python)
Até agora, tentei os seguintes testes para verificar se consigo executar com segurança um script python usando ssh:
Usando OpenSSH do Windows 10: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH Após alguma configuração, consegui copiar arquivos do lado do cliente para o servidor usando o
scp
. O próximo plano era usar ssh para executar remotamente um arquivo específico usandopython filename.py
Em seguida, entrei na pasta e tentei executar python filename.py. No entanto, não houve saída de
python
.Em seguida tentei o MobaSSH, e o problema foi o mesmo do teste com OpenSSH da Microsoft. `Erro fatal do Python: Py_Initialize: não é possível inicializar fluxos padrão do sys LookupError: codificação desconhecida: cp28591
Tópico atual 0x00000874 (chamada mais recente primeiro):`
A partir dos dois experimentos acima, inicialmente pensei que havia um problema com a instalação do python. Então, entrei diretamente na máquina e usei
cmd
para executar o mesmo arquivo quepython filename.py
ele executa e produz as saídas esperadas. Então python funciona bem na máquina WindowsMinha próxima hipótese foi que é impossível executar o python se for executado por meio de SSH. Para testar isso, entrei na minha VM do Ubuntu e fiz o mesmo experimento. Neste caso, o python funcionou bem, sem erros.
A partir desses experimentos, parece que se eu fizer login no Windows usando ssh
e tentar executar o python, não consigo executá-lo, talvez por causa de uma peculiaridade do python ou do Windows. Mas se eu estiver conectado diretamente ao Windows, posso executar o mesmo script python sem problemas. Além disso, parece que o ssh funciona perfeitamente em um ambiente Linux.
Preciso executar o script python em um ambiente Windows, não em um ambiente Linux, devido a algumas outras considerações. Portanto, embora a execução do arquivo de teste tenha funcionado bem na VM do Ubuntu, não consigo usar esse ambiente. .
Existe uma maneira de executar um script Python quando conectado via SSH em um ambiente Windows?
Responder1
Tive algum sucesso com o seguinte:
1. Após fazer login, inicie cmd.exe
cmd
2. Defina uma página de código, por exemplo 850 (de dentro do cmd.exe)
chcp 850
3.Defina o PATH e outras variáveis de ambiente (de dentro do cmd.exe)
set PATH=c:\Python27;c:\Python27\Scripts;C:\Program Files (x86)\...
set OTHER_VAR=...
Você pode colocar os comandos chcp e set em um arquivo em lote que você executa após efetuar login.
Para descobrir os valores desejados, você pode iniciar um shell cmd local na máquina de destino ou em outra máquina Windows que seja semelhante o suficiente e executar:
chcp
set
Para gravar todas as variáveis diretamente em um arquivo executado na máquina de destino a partir de um shell cmd local:
set >> myvars.cmd
Isso deve ser editado manualmente para preceder cada linha com um ´set ´ para criar um script que você pode executar após fazer login remotamente.
É ainda possível fazer login, iniciar o ssh e executar o script em uma linha ou em um script bash:
#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'
A opção /K do cmd executará o seguinte comando (sem sair após executá-lo).