У меня есть сервер Ubuntu 12.04 в моей офисной сети, которая используется для хостинга нашего мерзавца repos. Сервер выполняет Gitlab 7.1.1 и имеет SSH на нестандартном порте.
Это работает отлично на всех внутри и снаружи офисной сети за одним исключением. Исключением является сервер, которым управляют, с хостинговой компанией, таким образом, у меня только есть ограниченный доступ к нему.
Когда я пытаюсь клонировать repo на нестандартном порте, он испытывает таймаут. Я предполагаю, что это вызвано тем, что исходящий порт заблокирован хостинговой компанией. Для решения этого я устанавливаю перенаправление портов на своем офисном маршрутизаторе для передачи входящего трафика на порте 22 к моему нестандартному порту на сервере мерзавца. Я протестировал путем клонирования от Океанского VPS Digial, не указывая порт, и он хорошо работал.
Но проблематичный сервер теперь дает следующую ошибку:
Access denied.
fatal: The remote end hung up unexpectedly
Сервер мерзавца регистрирует соединение SSH, сделанное, и принимающий открытый ключ, как показано в /var/log/auth.log
:
Jan 20 15:09:07 gitlab sshd[3043]: Accepted publickey for git from 10.0.1.254 port 60771 ssh2
Jan 20 15:09:07 gitlab sshd[3043]: pam_unix(sshd:session): session opened for user git by (uid=0)
Jan 20 15:09:09 gitlab sshd[3162]: Received disconnect from 10.0.1.254: 11: disconnected by user
Jan 20 15:09:09 gitlab sshd[3043]: pam_unix(sshd:session): session closed for user git
Это выглядит не отличающимся от какого-либо другого подлинного запроса в журнале, таким образом, я понятия не имею, почему клон перестал работать?
Я устанавливаю тест repo на GitHub и проблематичных клонах сервера, прекрасных по SSH. Это просто имеет проблему с repos с моего офисного сервера по SSH по некоторым причинам.
Также стоит отметить, что проблематичный сервер может клонироваться по HTTP с именем пользователя и прекрасным паролем, это только по SSH, который является проблемой.
Какие-либо идеи, что проблема здесь?
PS, я - больше кодер, чем администратор сервера, я связываюсь с этим для попытки, улучшают процесс развертывания моей компании, большая часть этого плохо мне знакома
Я решил эту проблему.
Проблема заключалась в том, что открытый ключ для проблемного сервера уже был добавлен в Gitlab в качестве «ключа развертывания» для более раннего несвязанного тестирования. Затем он был удален как ключ развертывания, но по какой-то причине ключ сохранился в БД Gitlab. Затем Gitlab позволил мне повторно добавить тот же ключ для тестового пользователя, не жалуясь, что он уже существует в другом месте в БД. Но при попытке аутентификации с помощью этого ключа Gitlab будет искать ключ и получать первый «потерянный» ключ, поэтому он будет предоставлять только анонимный доступ, который, очевидно, не позволит клонировать.
Чтобы решить проблему, я нашел идентификатор потерянного ключа и удалил его с помощью git-shell:
./bin/gitlab-keys rm-key key-21
Где 21
был идентификатором потерянного ключа.
Теперь все работает, как ожидалось.