2016-03-18 5 views
1

Я пытаюсь отладить Jenkins Plugin, который, кажется, терпит неудачу из-за проблемы разрешения SSH. В принципе, плагин позволяет мне SSH с мастер-машины на конкретную сборку Jenkins на подчиненном компьютере, но по какой-то причине она не работает в системе, в которой я пытаюсь ее использовать.SSH - Помогите понять прокси-команду

При запуске плагин говорит мне, что я могу использовать что-то вроде следующей команды, чтобы SSH в раб строить из главной машины:

ssh.config

Host=*.localhost 
Port=43689 
ProxyCommand=ssh -p 43689 localhost diagnose-tunnel -suffix .localhost %h 

команда:

ssh -F ssh.config Test.localhost 

Это работает на тестовой системе, я настроил (USI ng две машины), но сбой в производственной среде с ошибкой Разрешение отклонено (publickey).

Хотя я, конечно, готов самостоятельно отлаживать проблему разрешения, я действительно смущен тем, как эта команда ssh работает:/Что именно она пытается сделать? Я исследовал этот вопрос, но я все еще смущен тем, как это работает с прокси-командой.

Я предполагаю, что он подключается к определенному порту в локальном хосте (мастер-машина jenkins), но как это разрешит мне ssh в подчиненную машину? Можно ли переписать эту команду в одну строку для удобства чтения? Что может привести к ошибке отказа в разрешении?

Спасибо за помощь! Я полагаю, что это, вероятно, очень простой вопрос, но я новичок в SSH, и я до сих пор пытаюсь понять :)

Update

Выход ssh -vF test_ssh <job>.<host>, в соответствии с просьбой! ^^ (с работой и хостом заменены тегами для удобства чтения)

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 
debug1: Reading configuration data test_ssh 
debug1: Applying options for *.<host> 
debug1: Executing proxy command: exec ssh -p 44078 <host> diagnose-tunnel -suffix .<host> <job> 
debug1: permanently_drop_suid: 497 
debug1: identity file /var/lib/jenkins/.ssh/identity type -1 
debug1: identity file /var/lib/jenkins/.ssh/identity-cert type -1 
debug1: identity file /var/lib/jenkins/.ssh/id_rsa type 1 
debug1: identity file /var/lib/jenkins/.ssh/id_rsa-cert type -1 
debug1: identity file /var/lib/jenkins/.ssh/id_dsa type -1 
debug1: identity file /var/lib/jenkins/.ssh/id_dsa-cert type -1 
debug1: identity file /var/lib/jenkins/.ssh/id_ecdsa type -1 
debug1: identity file /var/lib/jenkins/.ssh/id_ecdsa-cert type -1 
Permission denied (publickey). 
ssh_exchange_identification: Connection closed by remote host 
+0

сделал вас зарегистрируйте свой открытый ключ ssh с помощью prod-сервера? – sotona

+0

Благодарим за ответ! Я просто проверил ключи, и у меня есть открытый ключ от главной машины внутри файла authorized_keys подчиненного устройства. Я, кажется, могу без проблем работать с ssh в подчиненную машину, но это «ssh -p 43689 localhost», что дает мне проблемы с производственной настройкой с разрешенной ошибкой:/Я попытался добавить id_rsa.pub с главной машины в authorized_keys на том же компьютере, но он по-прежнему не работает ... –

+0

«разрешение отказано» или «соединение отказано»? вы уверены, что кто-то слушает порт 43689? – sotona

ответ

0

вашего ssh.config также должен содержать что-то вроде

User USERNAME 
PubKeyAuthentication yes 
IdentityFile /path/to/key 

где USERNAME является фактическим пользователем, который позволил подключить к вашему прод-сервер, /path/to/key их частный ключ и перед тем, что вы должны были сделать

ssh-copy-id -i /path/to/key.pub SERVER

где SERVER ваш прод хозяин

0

У меня была такая же проблема ..

Теперь я постараюсь ответить вам.

Что именно он пытается сделать?

ssh -p <port> <server> diagnose-tunnel -suffix .<server> %h 

diagnose-tunnel -suffix .<server> %h является команда, которая выполняется на <server>:<port>.Насколько я понимаю, именно специальная команда Jenkins помогает установить соединение с подчиненным узлом.

Разрешение отрицается (публикуется).

Существует решение, которое помогает мне:

  1. Сформировать частные & открытые ключи через ssh-keygen;
  2. Скопируйте открытый ключ (id_rsa.pub) в пользовательские настройки (http: // <jenkins_server>: 8080/пользователь/<jenkins_user_name>/configure);
  3. ~/.ssh/config Редактировать файл: Вы должны добавить jenkins_user_name к ProxyCommand линии:

    ProxyCommand ssh -p <port> <jenkins_user_name>@<jenkins_server> diagnose-tunnel -suffix .<jenkins_server> %h

  4. Также необходимо добавить User <jenkins_user_name> и IdentityFile /path/to/private_key как @sotona написано

Смежные вопросы