Qual é a melhor maneira de iniciar o ssh-agent com o Cygwin?

Qual é a melhor maneira de iniciar o ssh-agent com o Cygwin?

Eu gostaria ssh-agentde começar quando iniciar o Cygwin, já que uso o passthrough ssh com frequência.

Eu tentei adicionar:

eval `ssh-agent.exe`

para o meu .bashrc, mas sempre que uso Alt-F2para abrir uma nova janela de terminal, o .bashrcé executado e, portanto, novos ssh-agents são criados, o que é indesejável e atrapalha a passagem.

Tentei então mover o comando eval para .bash_profile, mas isso também resultou no mesmo problema - acho que cada nova janela de terminal é considerada um novo shell de login.

Uma terceira opção é usar cygrunsrv, mas acabei de descobrir e não tenho certeza de como usá-lo para esse propósito específico e, talvez mais importante, como transmitir as SSH_AUTH_SOCKinformações SSH_AGENT_PIDde onde o serviço é criado para cada novo shell criado .

Quaisquer sugestões sobre a melhor maneira de alcançar este resultado - onde um único agente ssh é executado e aguarda, e suas informações estão imediatamente disponíveis para serem usadas em qualquer shell recém-aberto - são bem-vindas.

Responder1

Você pode colocá-lo no seu .bashrc, mas antes de iniciá-lo novamente você deve verificar se ele já está rodando. Por exemplo, você pode fazer

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

como parte do processo.

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

Há uma resposta longa detalhando muito dissoaquino site da U&L.

Eu faço algo assim, mas faço com que o environarquivo inclua o nome do host atual, já que meu diretório inicial está em um compartilhamento de rede e quero executar o agente em hosts diferentes simultaneamente.

E para esclarecer explicitamente como isso responde à sua pergunta sobre como fazer com que a SSH_AUTH_SOCKvariável seja passada entre processos, você armazena a saída ssh-agentem um arquivo e a origina novamente em cada shell

informação relacionada