Для удобства оптимальный метод - это сочетание ответов 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?