Для удобства оптимальный метод - это сочетание ответов jmtd и Faheem .
Использование ssh-agent
одного означает, что ssh-agent
для каждого нового терминала, который вы открываете, необходимо создавать новый экземпляр . keychain
при инициализации запросит пароль для закрытого ключа (ключей) и сохранит его. Таким образом, ваш закрытый ключ защищен паролем, но вам не придется вводить пароль снова и снова.
Вики Arch рекомендует инициализацию брелки от /etc/profile.d/
или вашего профиля оболочки, таких как .bash_profile
или .bashrc
. Это имеет недостаток в том, что он инициализирует вашу цепочку для ключей, как только вы открываете терминал.
Более гибкий подход заключается в сочетании keychain
с конкретным tmux
сеансом. Итак, в .bash_profile
:
tsess=$(tmux ls 2>&1)
if [[ "${tsess%%:*}" = "secured" ]] &&
[[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
# start keychain
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
. $HOME/.keychain/$HOSTNAME-sh
fi
... и тогда это просто случай запуска защищенного tmux
сеанса по мере необходимости (запускается из связки ключей):
#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"
if [[ -z "$SSH_AUTH_SOCK" ]]; then
eval `ssh-agent`
trap "kill $SSH_AGENT_PID" 0
fi
if [[ -z "$PID" ]]; then
urxvtc -title "SSH" -e sh -c "${new}"
else
urxvtc -title "SSH" -e sh -c "${old}"
fi
ssh-add
Теперь ваша цепочка для ключей будет инициализирована только один раз, когда вы начнете этот конкретный tmux
сеанс. Пока этот сеанс сохраняется, вы сможете получить доступ к этим ssh
ключам и передать их в удаленные репозитории.
eval
вы могли бы просто напечататьssh-agent
?