Por que eval a saída do ssh-agent?

48

Para executar ssh-agent , preciso usar

eval $(ssh-agent)

Por que preciso eval da saída de ssh-agent ?

Por que não foi projetado para que eu possa executá-lo?

Nota: Os backticks (') são removidos quando estão sendo reprovados. Você pode ler mais sobre isso aqui, por exemplo .

    
por jx12345 15.03.2017 / 22:10

1 resposta

55

ssh-agent gera as variáveis de ambiente que você precisa para se conectar a ele:

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

Ao chamar eval , você carrega imediatamente essas variáveis em seu ambiente.

Quanto ao porquê ssh-agent não pode fazer isso em si ... Observe a escolha da palavra. Não "não", " não pode ". No Unix, um processo só pode modificar suas próprias variáveis de ambiente e passá-las para as crianças. não pode modificar o ambiente do processo pai porque o sistema não permite isso. Esse é um projeto de segurança bem básico.

Você poderia contornar o eval usando ssh-agent utility , em que utility é seu shell de login, seu gerenciador de janelas ou qualquer outra coisa que precise definir as variáveis de ambiente SSH. Isso também é mencionado no manual.

    
por 15.03.2017 / 22:30