Travis CI не в состоянии rsync (ssh) с publickey, но та же самая команда работает в терминале - PullRequest
0 голосов
/ 11 ноября 2018

Я настраиваю автоматическое развертывание с помощью TRAVIS CI, но мой скрипт застревает при попытке выполнить rsync для моего сервера. Из того, что я могу сказать, это сбой входа в систему SSH, в частности, вход в систему с помощью публичного ключа.

Мой YAML-файл (User, Host, Dir и Key Decryption (openssl aes - 256-cbc и т. Д.) Заменены):

language: node_js 
node_js:
- 10.7.0 
addons:
  ssh_known_hosts: <HOST>   
  hosts: <HOST> 
branches:   
  only:
  - master 
env:   
  global:
  - DEPLOY_USER=<USER>
  - DEPLOY_HOST=<HOST>
  - DEPLOY_DIRECTORY=<DIR> 
before_install:
- npm install -g npm@6.4.1 
install:
- npm install 
script:
- npm run build 
before_deploy:
- <DECRYPTION> -in deploy_rsa.enc -out /tmp/deploy_rsa -d
- eval "$(ssh-agent -s)"
- chmod 600 /tmp/deploy_rsa
- ssh-add /tmp/deploy_rsa 
deploy:   
  provider: script   
  skip_cleanup: true   
  script: rsync -r --delete-after --quiet -e"ssh -v -i /tmp/deploy_rsa" $TRAVIS_BUILD_DIR/dist/ <USER>@<HOST>:<DIR>   
on:
  branch: master

Все работает нормально до тех пор, пока rsync не выдаст этот журнал (опять же, имя хоста, пользователь и ключ ECDSA заменены здесь):

Deploying application
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /home/travis/.ssh/config
debug1: /home/travis/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to <HOST> [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /tmp/deploy_rsa type -1
debug1: identity file /tmp/deploy_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 pat OpenSSH_6.6.1* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA <ECDSA>
debug1: Host '<HOST>' is known and matches the ECDSA host key.
debug1: Found key in /home/travis/.ssh/known_hosts:11
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /tmp/deploy_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /tmp/deploy_rsa
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
<USER>@<HOST>'s password: debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password

Когда я пытаюсь использовать ту же команду rsync на своем компьютере (с той же самой публичной клавишей и тестовой папкой), она работает и дает следующее:

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: deploy_rsa
debug1: Authentication succeeded (publickey).
Authenticated to <HOST>.

Я просматривал документацию, искал повсюду, уже пробовал много разных вещей, разных способов добавить ключ в ssh-agent, указать его вручную, sudo true / false / required и т. Д. ... и я в растерянности.

Я замечаю небольшие различия в журнале, кажется, что журнал TRAVIS считает, что мой сервер принимает аутентификации по паролю, в то время как журнал моей машины показывает только «publickey» в качестве допустимого метода, который является правильным, поскольку аутентификация по паролю отключена.

ssh-agent корректно пытается дать ключ в / tmp / deploy_rsa, который по какой-то причине дает сбой, затем я даю его вручную, он показывает key_parse_private2: missing begin marker (что из моего поиска кажется нормальным сообщением, указывающим на успешное логин без пароля?) и, кажется, снова не удается.

Был бы способ заставить TRAVIS понять, что вход с паролем отключен? Заставить ssh-agent использовать только publickey? И почему он, по-видимому, повторяет попытку (пробует ключ из ssh-agent, пробует мой ключ и т. Д.), Но не показывает сообщений об ошибках, ключ кажется распознанным и действительным.

Возможно, дешифрованный ключ (deploy_rsa) недействителен? тот же ключ, до шифрования с помощью travis encrypt-file deploy_rsa --add работает на моем компьютере.

Заранее благодарю за ответы.

1 Ответ

0 голосов
/ 16 ноября 2018

Оказывается, Travis CI не хочет доменные имена (хотя это работает для меня во всех других контекстах), и ему абсолютно необходим IP-адрес.

Я пробовал это сделать, но у меня были другие проблемы (расшифровка закрытого ключа), и я забыл попробовать IP, как только они были исправлены.

Я чувствую себя глупо, но теперь это работает.

...