« Назад

jenkins: Cant connect to server

Обратился ко мне коллега с проблемой - по какой-то причине сервер непрерывной сборки jenkins не может работать через scp с одним из отданных ему хостов.

Для работы с scp в jenkins был настроен SCP plugin, которому указывается хост, порт, имя и пароль пользователя. При этом коллеге удавалось с этими учётными данными зайти на хост используя терминальный ssh клиент. Более того, сообщение об ошибке появлялось уже после ввода имени пользователя, до ввода пароля.

Информация в server.log сервера приложений оказалась крайне информативной:

[#|2013-11-11T19:37:21.175+0400|SEVERE|glassfish3.1.2|be.certipost.hudson.plugin.SCPRepositoryPublisher|_ThreadID=26;_ThreadName=Thread-2;|Auth fail|#]

[#|2013-11-11T19:37:21.176+0400|SEVERE|glassfish3.1.2|be.certipost.hudson.plugin.SCPRepositoryPublisher|_ThreadID=26;_ThreadName=Thread-2;|Cant connect to server|#]

За информативность этого сообщения стоит выразить особую благодарность автору плагина за "классический" код:

try {
	try {
		site.createSession();
		site.closeSession();
	} catch (JSchException e) {
		throw new IOException("Cant connect to server");
	}
	ok();
} catch (IOException e) {
	error(e.getMessage());
}

Зачем сообщать пользователю о причине возникновения ошибки, если можно выдать какое нибудь своё сообщение?

Возникшее предположение о неполном или неправильном файле .ssh/known_host не подтвердилось. Зато выяснилось, что проблем нет работе с sshd серверами под управлением Solaris, но при попытке соединения с другими серверами под управлением FreeBSD проблема сохранялась.

Диагностировать проблему удалось только запустив sshd в отладочном режиме, который сообщил:

Received disconnect from 192.168.X.X: 3: com.jcraft.jsch.JSchException: Auth fail [preauth]

Оказалось, что SCP plugin для jenkins для работы с ssh использует библиотеку JSch. А вот с аналогичной проблемой при использовании JSch люди уже сталкивались. И решается она разрешением PasswordAuthentication в sshd_config:

PasswordAuthentication yes

 



Пока нет комментариев. Создать новый.