Eu tenho um site como um repositório Git remoto, retirando do Bitbucket.com usando um alias SSH. Posso iniciar manualmente o ssh-agent no meu servidor, mas preciso fazer isso toda vez que faço login via SSH.
Inicio manualmente o ssh-agent:
eval ssh-agent $SHELL
Então eu adiciono o agente:
ssh-add ~/.ssh/bitbucket_id
Então ele aparece quando eu faço:
ssh-add -l
E eu estou pronto para ir. Existe alguma maneira de automatizar esse processo para que eu não precise fazer isso toda vez que fizer login? O servidor está executando o RedHat 6.2 (Santiago).
ssh-agent <command>
é executado<command>
como um subprocesso dessh-agent
, então você está iniciando um novo shell. Eu acho que você quereval ssh-agent
..bash_profile
é específico para bash,.profile
é genérico para todos os shells POSIX.bash
procurará primeiro e.bash_profile
, em seguida, usará como padrão.profile
.ssh-agent
um shell "padrão" (compatível com POSIX) éeval $(ssh-agent -s)
. Observe também que você deve se livrar adequadamente do agente ao fazer logout, por isso também é aconselhável inserirtrap 'kill $SSH_AGENT_PID' EXIT
sua.profile
após a linha que inicia o agente.Respostas:
Por favor, leia este artigo. Você pode achar isso muito útil:
http://mah.everybody.org/docs/ssh
Caso o link acima desapareça algum dia, estou capturando a parte principal da solução abaixo:
fonte
.bash_profile
usandosource ~/.bash_profile
na sua sessão atual do shell. A reinicialização da máquina também funcionará porque isso carregará a nova configuração de qualquer maneira.SSH_ENV="$HOME/.ssh/env"
(ou seja, não / ambiente) Por quê? O sshd usa ~ / .ssh / environment (consulte a página de manual: PermitUserEnvironment). O Github também recomenda isso em sua solução - help.github.com/articles/…ssh-agent
comando start no .bashrc fará com que oscp
comando não funcione.No Arch Linux, o seguinte funciona muito bem (deve funcionar em todas as distribuições baseadas em systemd):
Crie um serviço de usuário systemd, colocando o seguinte em
~/.config/systemd/user/ssh-agent.service
:Shell de instalação para ter uma variável de ambiente para o soquete (
.bash_profile, .zshrc, ...
):Ative o serviço, para que ele seja iniciado automaticamente no login e inicie-o:
Adicione a seguinte configuração ao seu arquivo de configuração ssh local
~/.ssh/config
(isso funciona desde o SSH 7.2):Isso instruirá o cliente ssh a sempre adicionar a chave a um agente em execução, portanto, não há necessidade de adicioná-la previamente.
fonte
ssh-agent
processo individual . Talvez eu não tenha conhecimento mesmo depois de ler os documentos.SSH_AGENT_PID
Porém, isso não definirá a variável de ambiente :(Pergunta antiga, mas me deparei com uma situação semelhante. Não pense que a resposta acima alcança completamente o que é necessário. A peça que falta é
keychain
; instale-o se ainda não estiver.Em seguida, adicione a seguinte linha ao seu
~/.bashrc
Isso iniciará
ssh-agent
se não estiver em execução, conecte-se a ele, carregue ossh-agent
variáveis de ambiente em seu shell e carregue sua chave ssh.Altere
id_rsa
para a chave privada em~/.ssh
você deseja carregar.Referência
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
fonte
keychain --eval id_[yourid file]
ao .bashrceval `keychain --eval id_[yourid file]`
a.bashrc
. Backticks necessários para avaliar as variáveis de ambiente no shell atual para acesso ao ssh-agent em execução.-q
opção para o modo silencioso. Mais informações sobre Keychain: funtoo.org/KeychainA solução aceita possui as seguintes desvantagens:
Se suas chaves não exigirem digitar a senha, sugiro a seguinte solução. Adicione o seguinte ao seu
.bash_profile
final (edite a lista de chaves de acordo com suas necessidades):Tem as seguintes vantagens:
Tem possíveis desvantagens:
ssh-add
comando influenciará apenas uma sessão, o que é de fato um problema apenas em circunstâncias muito atípicas;Observe que vários
ssh-agent
processos não são uma desvantagem, porque eles não levam mais memória ou tempo de CPU.fonte
Adicione isso ao seu e
~/.bashrc
, em seguida, efetue logout e entre novamente para entrar em vigor.Isso deve solicitar apenas uma senha na primeira vez que você fizer login após cada reinicialização. Ele continuará reutilizando o mesmo
ssh-agent
enquanto permanecer em execução.fonte
~/.ssh/id_rsa
? Parece que assh-add
parte da sua resposta espera nomes de arquivos padrão para as chaves.Então, eu costumava usar as abordagens descritas acima, mas eu meio que prefiro que o agente morra quando minha última sessão do bash termina. Isso é um pouco mais longo que as outras soluções, mas é a minha abordagem preferida. A idéia básica é que a primeira sessão do bash inicie o ssh-agent. Em seguida, cada sessão bash adicional verifica o arquivo de configuração (
~/.ssh/.agent_env
). Se houver e houver uma sessão em execução, origine o ambiente e crie um hardlink para o arquivo de soquete/tmp
(precisa estar no mesmo sistema de arquivos que o arquivo de soquete original). À medida que as sessões do bash são encerradas, cada uma exclui seu próprio hardlink. A última sessão a ser concluída constatará que os hardlinks possuem 2 links (o hardlink e o original), a remoção do soquete do próprio processo e a eliminação do processo resultarão em 0, deixando um ambiente limpo após o fechamento da última sessão do bash.fonte
Só para acrescentar mais uma solução: P, fui com uma combinação das soluções @spheenik e @ collin-anderson.
Poderia ser um pouco mais elegante, mas é simples e legível. Esta solução:
AddKeysToAgent yes
está em sua configuração ssh, para que as chaves sejam adicionadas automaticamente após o usoComentários bem-vindos :)
fonte
AddKeysToAgent yes
configuração. Obrigado.Eu o resolvi adicionando isso ao / etc / profile - em todo o sistema (ou ao usuário local .profile ou _.bash_profile_):
Isso inicia um novo ssh-agent se não estiver em execução para o usuário atual ou reconfigura o parâmetro env ssh-agent se estiver em execução.
fonte
if pgrep -u $WHOAMI $SERVICE >/dev/null
trabalho?Os usuários do shell de peixe podem usar esse script para fazer a mesma coisa.
fonte
Eu uso a ferramenta ssh-ident para isso.
De sua página de manual :
fonte
Tentei algumas soluções de várias fontes, mas tudo parecia demais. Finalmente eu encontrei o mais fácil :)
Se você ainda não está familiarizado com o zsh e o oh-my-zsh , instale-o. Você vai adorar :)
Então edite
.zshrc
encontre a
plugins
seção e atualize-a para usar da seguintessh-agent
maneira:E isso é tudo! Você estará
ssh-agent
em funcionamento toda vez que iniciar seu shellfonte
Eu gosto muito das suas respostas. Tornou o trabalho dos
cygwin / linux
hosts muito mais fácil. Combinei as funções de início e fim para torná-lo seguro.fonte