ssh variável de ambiente do arquivo de configuração?

4

Eu preciso entrar em vários servidores ssh remotos durante meu trabalho administrativo. Eu trabalho com três computadores diferentes do lado do cliente, todos eles são sistemas Debian GNU / Linux. Eu mantenho um diretório do espaço de trabalho onde coloco tudo o que preciso para fazer meu trabalho, e esse diretório contém, entre outras coisas, um arquivo bashrc e um arquivo ssh_config .

Eu sincronizo manualmente o conteúdo do diretório com um script que usa rsync de um computador cliente para os outros conforme eu me movo e começo a usar um cliente diferente.

O usuário local em cada um dos três clientes precisa de configuração mínima, para que, se eu precisar criar um novo usuário local ou reinstalar um cliente, eu tenha apenas rsync do espaço de trabalho e adicionar uma referência ao meu% personalizadoworkspace/bashrc no usuário real $HOME/.bashrc . Meu personalizado workspace/bashrc cria vários aliases e eu recebo meu ambiente normal, independentemente do cliente que estou usando.

Meu personalizado workspace/bashrc cria aliases para se conectar a servidores remotos dessa maneira:

alias s1='ssh -F ~/workspace/etc/ssh_config server1.example.com'

e faço login no server1 apenas digitando s1 em um terminal de qualquer cliente, porque meu ssh_config personalizado define as opções de autenticação de chave pública necessárias, o servidor de porta correto1 está escutando e o usuário correto.

Agora isso funciona como um encanto, desde que o comando ssh seja o que eu preciso. Infelizmente, assim que eu precisar de outro comando que, por sua vez, use ssh , as coisas se tornarão mais caóticas.

Por exemplo se precisar rsync de qualquer coisa para um desses servidores, sou forçado a escrever o comando ssh inteiro:

rsync -Pavz --delete -e "ssh -F $HOME/workspace/etc/ssh_config" ...

Coisas semelhantes acontecem com outros comandos, como scp , ssh-copy-id e outros.

Eu gostaria de poder escrever

rsync -Pavz --delete -e "ssh" ...

em vez disso, e ter ssh pegando seu nome de arquivo de configuração de uma variável de ambiente, para que eu possa definir essa variável de ambiente na minha bashrc e cada ssh invocação funciona automaticamente.

Existe essa variável de ambiente ou existe uma solução diferente para o problema?

    
por Lucio Crusca 09.04.2017 / 13:46

1 resposta

5

Isto é um pouco abusivo de todo o conceito e distorcendo as ferramentas para o seu caso de uso específico. Você deve preferir usar as ferramentas como deveriam. Os arquivos de configuração são, por padrão, em ~/.ssh/config .

  • Por que não criar um symlink daí para o seu ~/workspace/etc/ssh_config em todos os três computadores para que ele funcione imediatamente sem tudo isso?

  • Desde o OpenSSH 7.3, você pode usar a diretiva Include para obter o mesmo sem links simbólicos (para que você também possa ter configurações diferentes em alguns hosts, se necessário).

  • O mesmo truque pode ser feito com a configuração de todo o sistema em /etc/ssh/ssh_config .

Como você já tem ... adicione uma referência ao meu bashrc personalizado ... você pode juntar também a modificação do .ssh/config juntos em algum script no seu workspace .

    
por 09.04.2017 / 22:07