Я настроил свой материал ssh с помощью этого руководства, и он раньше работал хорошо (я мог работать hg push
не попросившись пароля). Что, возможно, произошло между затем и теперь, полагая, что я все еще использую тот же корневой каталог.
$ cat .hg/hgrc
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog
$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa':
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...
Необходимо использовать ssh агент. Короткий ответ: попробовать
$ ssh-add
перед продвижением. Предоставьте свой пароль при выяснении.
Если Вы уже не выполните ssh агент, то Вы получите следующее сообщение:
Could not open a connection to your authentication agent.
В той ситуации можно запустить один и настроить среду таким образом
eval $(ssh-agent)
Затем повторитесь ssh-add
команда.
Это стоит смотреть на ssh страницу справочника агента.
Способ решить это с ssh-agent
и ssh-add
:
$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa:
После этого пароль сохраняется для текущей сессии. и не будет спрошен снова.
Я использую Связку ключей для управления ssh ключи. Это также доступно в Debian и поэтому по-видимому, Ubuntu с
apt-get install keychain
Вот страница пакета связки ключей Debian. Как Вы видите, проект не очень активен, но работает на меня. Я также прокомментировал немного об этом в другом ответе здесь
Для удобства оптимальный метод является комбинацией ответов jmtd и Faheem.
Используя ssh-agent
один означает что новый экземпляр ssh-agent
потребности, которые будут созданы для каждого нового терминала, Вы открываетесь. keychain
при инициализации попросит пароль для закрытого ключа (ключей) и сохранит его. Тем путем Ваш закрытый ключ защищен паролем, но Вы не должны будете вводить свой пароль много раз.
Дуга Wiki рекомендует инициализировать связку ключей от /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
сессия как и при необходимости (запущенный от keybind):
#!/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
ключи и нажатие в Ваши удаленные репозитории.
.profile
- тем путем Вы получите подсказку для ключей, как только Вы входите в систему.
– jasonwryan
20.02.2012, 22:29
eval
Вы могли просто ввестиssh-agent
? – James McMahon 18.09.2017, 20:07eval
делает excuting. – tshepang 03.02.2018, 11:21