Para rodar ssh-agent
eu tenho que usar
eval $(ssh-agent)
Por que eu tenho que eval
a saída de ssh-agent
?
Por que não foi projetado para que eu possa executá-lo?
Nota: Backticks (`) removidos porque estão sendo descontinuados. Você pode ler mais sobre isso aqui, por exemplo .
man
página, para começar ...ssh-agent
é que seja "projetado dessa maneira", é unix / linux, porquessh-agent
é executado em um processo filho do shell. Os processos filho não podem modificar os processos pai. Mas uma função pode: porque é executada no processo atual. Então, você poderia escrever uma função:do_set_ssh_agent() { eval
ssh-agent; }
e que poderia ser executado simplesmente como:$ do_set_ssh_agent
. Mas "programas" não são (normalmente) instalados como "funções" no linux / unix; em vez disso, os programas são instalados como arquivos que, como mencionado, são executados em um processo filho. (Fonte de scripts é uma excepção, mas ssh-agente é binária.)Respostas:
ssh-agent
gera as variáveis de ambiente que você precisa para se conectar a ele:Ao ligar,
eval
você carrega imediatamente essas variáveis em seu ambiente.Quanto ao porquê
ssh-agent
não pode fazer isso sozinho ... Observe a palavra escolha. Não "não", " não posso ". No Unix, um processo pode modificar apenas suas próprias variáveis de ambiente e transmiti-las aos filhos. Ele não pode modificar o ambiente do processo pai porque o sistema não permite. Este é um design de segurança bastante básico.Você pode contornar o problema
eval
usandossh-agent utility
whereutility
é seu shell de login, seu gerenciador de janelas ou qualquer outra coisa que precise ter as variáveis de ambiente SSH definidas. Isso também é mencionado no manual.fonte
eval
usandossh-agent utility
whereutility
is your shell de login, seu gerenciador de janelas ou qualquer outra coisa que precise para ter as variáveis de ambiente SSH definidas. Isso também é mencionado no manual. Nenhum utilitário externo pode definir variáveis no ambiente de chamada.