Configurar shell padrão inicializado pelo OpenSSH no Windows 7

3

Existe uma maneira de configurar OpenSSH no Windows 7 para inicializar outro shell diferente do shell de comando padrão do Windows?

me@linuxhost:~
$ ssh me@windowshost
me@windowshost's password:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

me@windowshost C:\Users\me> exit
Connection to windowshost closed.
me@linuxhost:~
$

Como alternativa, instalar o Cygwin e incluir o OpenSSH nos pacotes Net adicionais resulta em um shell Cygwin padrão, então a mesma pergunta é: existe uma maneira de configurar o shell inicializado pelo OpenSSH após a instalação?

EDITAR:

Obrigado @simlev por sua sugestão de usar o Cygwin Eu reformulei minha pergunta para representar mais claramente o meu problema.

    
por mlegge 24.02.2017 / 22:35

2 respostas

2

O Win32-OpenSSH codifica o cmd.exe como o shell padrão na origem: consulte as linhas 978-984 e 1081-1086 de shell-host.c. Com isso dito, parece que a única maneira de alterar o shell padrão é alterá-lo nesses locais e recompilar o OpenSSH.

    
por 02.03.2017 / 06:10
3

Minha calorosa recomendação é usar o Cygwin para aceitar conexões ssh em sua máquina Windows. Isso permitirá que você scp para e a partir dele, bem como o login de um sistema remoto via ssh para um shell Bash e um git de linha de comando.

user@linuxhost$ ssh 192.168.x.x
Last login: Sun Feb 12 08:20:07 2017 from 10.x.x.x
user@windowshost$ echo $0 && git --version
-bash
git version 2.8.3

O shell pode ser customizado: ash, bash, dash e sh são incluídos por padrão, mas basta executar o instalador do Cygwin e você pode adicionar sua escolha de zsh, mksh, tcsh ou posh. Em seguida, adicione a seguinte linha a /etc/nsswitch.conf :

db_shell: /bin/sh

possivelmente substituindo /usr/bin/sh pelo caminho para o seu shell preferido. Todos os processos do Cygwin (janelas de terminal e serviço sshd) devem ser reiniciados para que a configuração tenha efeito.

Existe até uma maneira de obter um prompt de cmd ou powershell após o login, o qual eu descobri recentemente em Stackoverflow .

  1. Faça o download do winpty para o Cygwin e extraia winpty.exe , winpty.dll e winpty-agent.exe para /bin . Se você fizer isso de fora de um terminal Cygwin, procure por um subdiretório bin da pasta de instalação do Cygwin.
  2. Crie dois arquivos em lote em /bin e verifique se eles têm permissões de execução. Vamos chamá-los de winpty-cmd.bat e winpty-powershell.bat e preenchê-los com o seguinte conteúdo, onde é claro que <cygwin path> é um marcador para o caminho para o qual você instalou o Cygwin (por padrão é C:\cygwin ):

    @ECHO OFF
    <cygwin path>\bin\winpty.exe cmd
    

    e

    @ECHO OFF
    <cygwin path>\bin\winpty.exe powershell
    
  3. Coloque uma dessas linhas em /etc/nsswitch.conf :

    db_shell: /bin/winpty-cmd.bat
    

    ou

    db_shell: /bin/winpty-powershell.bat
    
  4. Reinicie o serviço sshd.

Como o título foi "reformulado" e minha postagem pode parecer um pouco fora de lugar, permita-me responder diretamente à pergunta original:

"Use git bash em vez de cmd ao sshing do Linux"

Além de usar o Cygwin para aceitar conexões ssh na máquina Windows:

  1. Siga a etapa 1. acima.
  2. Crie um arquivo chamado <cygwin path>\bin\winpty-gitbash.bat com esses conteúdos, em que <cygwin path> é um espaço reservado para o caminho para o qual você instalou o git-for-windows (por padrão, é C:\Program Files\Git ):

    @ECHO OFF
    SET PATH="/bin"
    <cygwin path>\bin\winpty.exe "<git path>\bin\bash.exe"
    
  3. Coloque esta linha em /etc/nsswitch.conf :

    db_shell: /bin/winpty-gitbash.bat
    
  4. Reinicie o serviço sshd.
por 27.02.2017 / 20:03