Назад | Перейти на главную страницу

Один ключ SSH для нескольких серверов Ubuntu + Windows + Teamcity

Я хочу использовать один и тот же ключ SSH для доступа к нескольким серверам Ubuntu. Причина в том, что я хочу развернуть наше приложение в средах DEV, STAGING, PROD, LOCAL через CI-сервер. В этих средах мы используем серверы Ubuntu. Технический руководитель попросил меня создать один ключ и использовать его для всех серверов, чтобы упростить непрерывную интеграцию.

Мы используем Teamcity для CI, а сервер Teamcity и его агенты работают на одном сервере Windows.

Я создал пары ключей id_rsa и id_rsa.pub на одном сервере (ЛОКАЛЬНЫЙ сервер).

Следующим шагом является копирование id_rsa.pub на все остальные серверы и загрузка файла id_rsa на сервер Teamcity.

Я предполагаю, что, поскольку теперь на сервере Teamcity есть ключ id_rsa, он должен иметь возможность подключаться к серверам Ubuntu по ssh и выдавать команды через SSH Exec (плагин Deployer).

Может ли кто-нибудь сказать мне с ключевой точки зрения SSH, что я сделал и что до сих пор считал правильным? Удаленные серверы - это Ubuntu, а клиент (сервер Teamcity) - это сервер Windows.

Как я уже описал выше, я попытался подключиться к серверу, на котором сгенерировал ключи с городского сервера. В этом случае я загрузил id_rsa на сервер teamcity и попытался подключиться. Я указал следующий путь к файлу id_rsa. Я подтвердил, что файл действительно находился в следующем месте:

E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys где E:\BuildServerConfig это каталог данных.

Но я получил следующую ошибку

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: E: \ BuildServerConfig \ config \ projects \ MyProject \ pluginData \ ssh_keys (система не может найти указанный путь)

Я знаю, что путь необязательный, когда я удалил путь, он дал следующую ошибку

Неожиданная ошибка: java.lang.IllegalArgumentException: аргумент для параметра @NotNull "путь" в jetbrains / buildServer / util / FileUtil.resolvePath не должен быть нулевым.

Могли бы некоторые просветить меня по этому поводу?

Я ничего не знаю о Teamcity и полагаюсь на ответ Catbird55 относительно сервера. Однако на стороне Ubuntu недостаточно просто скопировать файл id_rsa.pub на удаленные серверы. Вам необходимо определить идентификатор пользователя, который Teamcity будет использовать для подключения к серверам, а затем добавить содержимое id_rsa.pub в authorized_keys для этого пользователя:

cat /path/to/id_rsa.pub >> ~teamcityuser/.ssh/authorized_keys

И, возможно, установите некоторые разрешения, если authorized_keys еще не существует:

chown teamcityuser ~teamcityuser/.ssh/authorized_keys
chmod 600 ~teamcityuser/.ssh/authorized_keys

Может ли кто-нибудь сказать мне с ключевой точки зрения SSH, что я сделал и что до сих пор считал правильным?

Думаю, есть проблема.

Вы говорите, что путь не обязателен. Приложение Java ожидает, что файл будет здесь:

E: \ BuildServerConfig \ config \ projects \ MyProject \ pluginData \ ssh_keys

Но читатели этого поста не знают, существует ли там копия. Вы говорите, что поместили файл сюда:

E: \ BuildServerConfig \ config \ projects \ MyProject \ pluginData \ ssh_keys

Я бы сделал одно из двух:

1) Можно ли изменить код для поиска «pluginData подпапки MyProject вместо pluginData BeyondBank?» Если нет, используйте второй вариант: 2) Можно ли поместить файл ssh_keys в подпапку MyProject pluginData?