На удаленном сервере для развертывания кода с BitBucket используем защишенное соединение иаутентификацию по ssh ключам. Ксамому серверу подключаюсь через putty (с win10 сижу), и каждый раз приходится заново запускать ssh-agent командой eval $(ssh-agent) и добавлять нужные ключи. Посмотрел в запущенные процессы, все ранее запущенные ssh-agent'ы висят в памяти, но если разорвать соединение с сервером и затем снова открыть, ssh-agent снова недоступен. Подскажи в чем может быть проблема?
devloop@s05657c43:~# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-m8EJNB3MFimr/agent.13061; export SSH_AUTH_SOCK;
SSH_AGENT_PID=13062; export SSH_AGENT_PID;
echo Agent pid 13062;
devloop@s05657c43:~$ ssh-add .ssh/devloop
Could not open a connection to your authentication agent.
Ответ
сам факт запуска процесса ssh-agent на отдалённой машине уже намекает на то, что вы, вероятно, используете его не по назначению.
цитата из man ssh-agent
The idea is that the agent is run in the user's local PC, laptop, or terminal. Authentication data need not be stored on any other machine, and authentication passphrases never go over the network.
мой вольный перевод:
идея в том, что ssh-agent запускается на локальном компьютере. чтобы никакие аутентификационные данные не нужно было хранить на другой машине, и никакие пароли не передавались по сети.
судя по этому фрагменту:
$ ssh-add .ssh/devloop
вы хотите с первой отдалённой машины аутентифицироваться на каких-то других отдалённых машинах по ключу, хранящемуся на удалённой машине (в файле ~/.ssh/devloop).
в таком случае вам нет смысла запускать на этой отдалённой машине процесс ssh-agent. для того, чтобы аутентифицироваться на других машинах с помощью этого ключа, можете воспользоваться любым из перечисленных вариантов:
переименуйте файл ~/.ssh/devloop в ~/.ssh/id_rsa. этот вариант не подойдёт, если такой файл уже есть и его содержимое требуется вам для каких-то других целей.
указывайте явно этот файл при подключении:
$ ssh -i ~/.ssh/devloop другая-отдалённая-машина
добавьте в начало файла ~/.ssh/config строку:
identityfile ~/.ssh/devloop
тогда программа ssh будет пытаться использовать и этот файл при аутентификации.
если этот файл требуется использовать только для аутентификации лишь на нескольких определённых машинах, тогда лучше вместо указанной строки добавить в конец файла ~/.ssh/config секцию:
host машина1 машина2 машина3
identityfile ~/.ssh/devloop
но если я неправильно угадал, и вам на самом деле необходим процесс ssh-agent, то лучше запускать его в качестве «прослойки» (как он собственно, и используется в современных дистрибутивах), т.е. сразу указывать при подключении команду вида ssh-agent оболочка, примерно так:
$ ssh -t отдалённая-машина ssh-agent bash
опция -t здесь необходима для того, чтобы был отведён tty (если не указывать команду, т.е., инициировать запуск оболочки, то tty отводится автоматически).
а ещё, пожалуй, лучше будет использовать терминальный мультиплексор (screen, tmux и т.п.), который, кстати, тоже можно запускать с «прослойкой» в виде ssh-agent, примерно так:
$ ssh -t отдалённая-машина ssh-agent screen
p.s. и, да, вопрос не несёт в себе никакой дистрибутивной специфики, а касается лишь конкретно клиента openssh
Комментариев нет:
Отправить комментарий