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.
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.
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 .
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. 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
Coloque uma dessas linhas em /etc/nsswitch.conf
:
db_shell: /bin/winpty-cmd.bat
ou
db_shell: /bin/winpty-powershell.bat
Como o título foi "reformulado" e minha postagem pode parecer um pouco fora de lugar, permita-me responder diretamente à pergunta original:
Além de usar o Cygwin para aceitar conexões ssh na máquina Windows:
1.
acima. 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"
Coloque esta linha em /etc/nsswitch.conf
:
db_shell: /bin/winpty-gitbash.bat