ssh arquivo de configuração com várias versões ssh

4

Eu realmente gosto da palavra-chave "Match" que foi adicionada ao OpenSSH em torno da versão 6.5, e eu faço uso pesado dela no meu arquivo .ssh / config.

Mas esse arquivo de configuração está em minha página NFS-ed e, portanto, é referenciado quando eu efetuo login em qualquer um dos vários computadores em nossa LAN.

E muitos desses computadores ainda têm versões ssh anteriores a 6.5.

Então, se eu estiver em um desses computadores, e tentar ssh (ou scp / rsync), recebo uma reclamação de que Match é uma 'opção de configuração ruim', e o ssh termina.

Eu prefiro muito mais o ssh continuar sem as personalizações no meu arquivo de configuração, do que não funcionar de todo. Mas eu não consigo encontrar nenhuma maneira de escrever o arquivo de configuração para que versões mais novas possam fazer uso de novas opções, mas a versão mais antiga funciona sem elas. Se alguém tiver alguma ideia brilhante, por favor, compartilhe.

Eu consegui descobrir que eu posso fazer "ssh -F / dev / null" com versões mais antigas. Eu apenas acho cansativo que isso seja necessário. Preferiria uma solução "automática".

    
por Phil 19.12.2016 / 12:51

1 resposta

3

Infelizmente, isso não é possível. Alguns aplicativos, nos quais versões mais recentes introduziram novas sintaxes opcionais, recorreram a comentários de "compilação condicional", um exemplo notável é o MySQL.

Mas, felizmente, o OpenSSH ainda não está nessa fase.

Solução possível: Se todo o seu diretório pessoal estiver montado em sistemas operacionais diferentes, você poderá incluir um script em seu .profile que verifica a versão do SSH e, se não for suficiente para carregar seu arquivo de configuração, aliases ssh to %código%. Por exemplo:

if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    alias ssh="/usr/bin/ssh -F/dev/null"
fi

Como alternativa, conforme o comentário @derobert, um alias pode não ser suficiente para alguns casos de uso, como ssh -F /dev/null ou outros aplicativos que usam o OpenSSH como transporte e chamam o programa rsync diretamente (sem deixar o shell resolva o alias). Se isso realmente for um problema, talvez você queira criar um script chamado ssh em seu diretório bin local (geralmente ssh ou ~/bin ). Quando um aplicativo resolve o caminho para o binário ~/.local/bin , ele deve ver seu diretório bin local no início do caminho e executar seu script, que então executará a lógica necessária.

Talvez algo assim:

#!/bin/bash
if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    /usr/bin/ssh -F/dev/null "$@"
else
    /usr/bin/ssh "$@"
fi
    
por 19.12.2016 / 13:08

Tags