Невозможно выполнить scp в Jenkins

В сценарии вы можете реализовать логику ротации журналов. Выполните всю регистрацию с помощью функции:

log()
{
   ...
}

Эта функция, во-первых, делает что-то вроде:

printf "%s\n" "$*" >> logfile

затем проверяет размер файла или каким-то образом решает, что файл требует поворота. В этот момент файл logfile.1 , если он существует, удаляется, файл logfile.0 , если он существует, переименовывается в logfile.1 ] и файл журнала переименован в файл журнала.0 .

Решение о вращении может быть основано на счетчике, который хранится в самом скрипте. Когда он достигает 1000, он сбрасывается до нуля.

Если всегда требуется строгое усечение до 1000 строк, сценарий может подсчитать количество строк в файле журнала при запуске и соответствующим образом инициализировать счетчик (или, если счетчик уже соответствует или превышает 1000, выполнить ротацию немедленно ).

Или вы можете получить размер, например, с помощью wc -c logfile , и выполнить ротацию на основе превышения определенного размера.Таким образом, файл никогда не нужно сканировать для определения состояния.

2
22.01.2020, 13:40
5 ответов

Ключ hosts необходимо добавить в файл "known_hosts" клиента, в вашем случае пользователя, под учетной записью whos запущен сервер jenkins. Итак, что вам нужно сделать, это:

  1. Включить ssh-вход для пользователя jenkins
  2. войти как jenkins
  3. ssh на удаленный сервер
  4. ответить на вопрос «должны ли серверы идентичны быть добавленным .. "с да ..

Тогда все готово. После этого скрипт сможет выполнять scp с пользовательским ключом pubkey.

3
27.01.2020, 21:52

Я нашел решение проблемы. 1. Я создал новую пару ключей shh под пользователем jenkins. 2. Добавил ключ .pub на удаленный сервер. При выполнении ssh с сервера jenkins используется только что созданный закрытый ключ. Теперь и ssh, и scp работают как часть шага сборки. Спасибо

1
27.01.2020, 21:52

Короче говоря, вам нужно добавить ssh-ключ пользователя Jenkins на сервер, на котором вы пытаетесь войти, как этот пользователь.

Детали:

Войдите на сервер jenkins, затем:

sudo passwd jenkins

дважды введите пароль, который вы хотите дать пользователю jenkins, затем:

su jenkins
cd
ssh-keygen

Нажмите Enter, чтобы открыть все параметры. Затем скопируйте новые ключи ssh на сервер, который вы хотите скопировать на :

.
scp.ssh/id_rsa.pub user@newserver:/home/user/jenkins_key

При появлении запроса нажмите «Да», чтобы продолжить.

Затем войдите на этот сервер как этот пользователь, затем:

ssh user@server

и введите пароль, затем

cd.ssh
ls -lah

если нет "авторизованных _ключей", то:

cd.ssh
touch authorized_keys

Если файл «авторизованных ключей _» игнорируется вышеописанным шагом, тогда:

cd
cat jenkins_key >>.ssh/authorized_keys
rm -rf./jenkins_key

выход/выход с сервера Затем вернитесь на сервер jenkins:

ssh user@newserver

Вы должны войти в систему напрямую без запросов или ввода пароля

Теперь снова запустите задание scp в Jenkins

2
27.01.2020, 21:52

небезопасный обходной путь заключается в использовании:

scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${sourceFile} ${targetPath}

Это небезопасно, поскольку ключ хоста никогда не проверяется. Это может привести к человеку -в -средних атаках -. Тем не менее трюк, который можно было бы иметь в кармане, чтобы использовать в особых случаях и в изолированных сетях.

1
27.01.2020, 21:52

Подключаемый модуль агента SSH

Этот подключаемый модуль позволяет предоставлять учетные данные SSH для сборок через агента ssh -в Jenkins.https://plugins.jenkins.io/ssh-agent/

Если вы снова видите эту ошибку, запустите эту команду один раз из задания Jenkins:

ssh -o StrictHostKeyChecking=no user@host hostname

После этого вы можете просто запустить ssh из Jenkins job:

ssh user@host hostname
0
12.02.2020, 15:20

Теги

Похожие вопросы