Почему ssh-agent не сохраняет мой незашифрованный ключ для последующего использования?
Каждый раз, когда я отправляю SSH на другой сервер с нашего безголового сервера Ubuntu, меня просят ввести пароль для моего файла ключей. Даже если я ранее подключился к серверу.
У вас есть идеи, почему это возможно? Это может быть что-то простое, как ssh-agent
в данный момент не работает или что-то.
Тот же ключ на моем рабочем столе Ubuntu Gnome работает нормально. И сервер, и рабочий стол работают под управлением Ubuntu 10.10.
ps -ef | grep '[s]sh-agent'
simon 3219 1 0 12:46 ? 00:00:00 ssh-agent
3 ответа
Даже если агент включен, если определенные переменные среды не установлены, у вас нет ссылки на агента. Более того, даже если все в порядке, агент и переменные, идентичность не отправляется автоматически агенту: это задача для ssh-askpass
, работает только в X сессиях.
Если вы используете bash, создайте файл ~/.bash_profile
с этим содержанием:
# File: ~/.bash_profile
# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
. ~/.profile
fi
# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
echo "Starting ssh agent"
eval $(ssh-agent -s)
agent_started=1
fi
# ssh become a function, adding identity to agent when needed
ssh() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/ssh "$@"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "$@"
}
export -f git
изменить имя файла ~/.ssh/id_dsa
следуя вашим потребностям, и добавьте эту строку в ~/.bash_logout
# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
echo "Killing ssh agent"
ssh-agent -k
fi
Последнее замечание: это не мешает работе гнома, потому что только в этом случае ~/.profile
источником, и вы можете извлечь выгоду из ssh-askpass
графический интерфейс, который запрашивает пароль и отправляет его на ssh-agent
,
Я недавно начал использовать ssh-идент:
https://github.com/ccontavalli/ssh-ident
все, что вам нужно сделать, это добавить что-то вроде:
alias ssh="/path/to/ssh-ident"
в вашем .bashrc
, Кроме того, вы можете ln -s /path/to/ssh-ident ~/bin/ssh
или какой-то другой каталог в вашем PATH перед /bin
а также /usr/bin
,
Этот вопрос имеет довольно хороший ответ в SuperUser.
Я нашел подсказку использовать Keychain довольно полезным.