Eu tenho o servidor Windows OpenSSH instalado e funcionando corretamente. Eu posso alterar o shell padrão que é ssh'd para usar HKLM:\SOFTWARE\OpenSSH
e adicionar uma DefaultShell
propriedade conforme descrito aqui .
Então vamos ao exemplo padrão, já que ele funciona como está em praticamente todas as instalações do Windows com o C:\Windows
caminho "normal":
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Agora digamos que eu queira adicionar um parâmetro a ele, talvez "-NoLogo". Este é apenas um exemplo. Em última análise, eu gostaria de poder lançar em uma distribuição WSL com opções. Mas, por enquanto, vamos simples:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo" -PropertyType String -Force
Isso não apenas não funciona, como também interrompe o login de maneiras estranhas. Com o primeiro método (sem argumentos), minha chave pública no ssh-agent é oferecida e aceita. Quando adiciono o -NoLogo
, acabo em um prompt de senha, que falha ao usar minha senha do Windows.
Espetáculos de corrida sshd.exe -ddd
:
User not allowed because shell c:\\windows\\system32\\windowspowershell\\v1.0\\powershell.exe -nologo does not exist
Ok, então isso não vai funcionar, porque o OpenSSH verifica se a DefaultShell
string exata é um executável.
Vejo que existem duas outras configurações de registro, mas nenhuma parece ser o que estou procurando . Pode-se pensar em seu nome que DefaultShellCommandOption
seria útil aqui, mas é simplesmente a opção necessária para o shell quando um comando é passado, como:
ssh hostname ls
Como uma das tentativas de resposta aqui pensei DefaultShellCommandOption
que faria o truque, eu tentei e confirmei que ela só é usada quando um comando é passado. Também posso ver na fonte OpenSSH que shell_option é usado apenas quando há um comando , caso contrário, ele só executa o shell sozinho:
if (command) {
size_t len = strlen(shell) + 1 + strlen(shell_option) + 1 + strlen(command) + 1;
pty_cmd = calloc(1, len);
strcpy_s(pty_cmd, len, shell);
strcat_s(pty_cmd, len, " ");
strcat_s(pty_cmd, len, shell_option);
strcat_s(pty_cmd, len, " ");
strcat_s(pty_cmd, len, command);
} else {
pty_cmd = shell;
}
Alguém está ciente de uma maneira de adicionar parâmetros/argumentos ao DefaultShell
Windows OpenSSH?