У меня 3 сервера:
werkstation.example.com -> сервер, на котором клонируется репозиторий gitlab и для изменения файлов из репозитория
git.example.com -> gitab сервер с репозиторием "tomcat"
docker.example.com -> сервер, на который файлы будут скопированы с помощью git hook
Мой git-крючок:
#!/bin/sh
read oldrev newrev refname
REPO="git@git.example.com:michaelv1234/tomcat.git"
BRANCH=`echo $refname | sed -n 's/^refs\/heads\///p'`
BRANCH_DIR="/home/michael"
SSH_DEST="michael@docker.example.com"
if [ "$newrev" -eq 0 ] 2> /dev/null; then
# branch is being deleted
echo "Deleting remote branch $SSH_DEST $BRANCH_DIR/$BRANCH"
echo "$SSH_DEST" /bin/sh
ssh "$SSH_DEST" /bin/sh <<-EOF
cd "$BRANCH_DIR" && rm -rf $BRANCH
EOF
else
# branch is being updated
echo "Updating remote branch $SSH_DEST $BRANCH_DIR/$BRANCH"
ssh "$SSH_DEST" /bin/sh <<-EOF
{ cd "$BRANCH_DIR/$BRANCH" || mkdir -p "$BRANCH_DIR/$BRANCH" && cd "$BRANCH_DIR/$BRANCH"; } \
&& { git fetch origin && git reset --hard origin/$BRANCH || { git clone "$REPO" ./ && git checkout $BRANCH; }; }
EOF
fi
Но я все еще получаю эту ошибку:
michael@werkstation:~/tomcat$ git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Updating remote branch michael@docker.example.com /home/michael/master
remote: Host key verification failed.
To git@git.example.com:michaelv1234/tomcat.git
0032c02..6e8ef97 master -> master
Branch master set up to track remote branch master from origin.
Файлы и каталоги прав:
custom_hooks directory:
drwxr-xr-x 2 git git 4096 May 27 12:05 custom_hooks
post-receive file in custom_hooks:
rwxr-xr-x 1 git git 1435 May 27 12:05 post-receive
Я уже удалил файл «known_hosts» на всех серверах, но все еще получаю сообщение об ошибке
Решение: на сервере Gitlab:
sudo su - git
ssh-keygen
ssh-copy-id michael@docker.example.com
ssh michael@docker.example.com
Когда SSH-соединение инициализируется, сервер аутентифицируется для клиента. Затем клиент проверяет, есть ли ключ уже в файле known_hosts. Если нет, пользователю будет предложено. Вот почему при первом SSH-подключении вы получаете запрос, спрашивающий, хотите ли вы принять ключ с отпечатком пальца xyz. Затем открытый ключ сервера записывается в файл known_hosts.
Если вы никогда не подключались к серверу по SSH, его нет в файле known_hosts, и автоматическое подключение не будет выполнено. Самый простой способ обойти это - самостоятельно подключиться к серверу по SSH в качестве пользователя, который должен настроить команду git и ответить «да» в приглашении.