2016-11-12 5 views
2

最初は、gitlab CIを構築した後に展開することを試みていましたが、結果に "host unreachable"と表示されます。Gitlab CIビルドで私は秘密鍵でAWS EC2にsshすることはできません

いくつかの試行錯誤の末、デプロイメントのためAWS EC2インスタンスに秘密鍵でsshを実行したときにsshパーミッションが拒否されていることがわかりました。 gitlabのCIがこれを構築するとき、それは基本的にこれらのsshのエラーメッセージを与える

image: ansible/ubuntu14.04-ansible:stable 

stages: 
    - deploy 

deploy_web: 
    stage: deploy 
    script: 
    - "echo Ansible" 
    - "echo Environment: ${ENV}" 
    - "echo TAG: ${TAG}" 

    - "echo ${VAULT_PASS} > vault_pass.txt" 
    - "mkdir sshkey" 
    - "echo ${SSH_KEY_APP} > ./sshkey/app-key.pem" 
    - "chmod 600 ./sshkey/app-key.pem" 
    - "export SSH_KEY_DIR=`pwd`/sshkey" 
    - "export ANSIBLE_HOST_KEY_CHECKING=False" 
    - "ssh-keyscan foobar.io >> ~/.ssh/known_hosts" 
    - "ssh -v -i ./sshkey/app-key.pem [email protected]" // for debugging 

    - "ansible-playbook -i ${ENV} servers.yml --vault-password-file vault_pass.txt -vvvv --tags=${TAG}" 

.gitlab-ci.yml:

マイ.gitlab-ci.ymlの設定は次のようなものです:

OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014 
debug1: Reading configuration data /etc/ssh/ssh_config 
debug1: /etc/ssh/ssh_config line 19: Applying options for * 
Pseudo-terminal will not be allocated because stdin is not a terminal. 
debug1: Connecting to foobar.io [12.34.56.78] port 22. 
debug1: Connection established. 
debug1: permanently_set_uid: 0/0 
debug1: identity file ./sshkey/app-key.pem type -1 
debug1: identity file ./sshkey/app-key.pem-cert type -1 
debug1: Enabling compatibility mode for protocol 2.0 
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7 
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7 pat OpenSSH_6.6.1* compat 0x04000000 
debug1: SSH2_MSG_KEXINIT sent 
debug1: SSH2_MSG_KEXINIT received 
debug1: kex: server->client aes128-ctr [email protected] none 
debug1: kex: client->server aes128-ctr [email protected] none 
debug1: sending SSH2_MSG_KEX_ECDH_INIT 
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY 
debug1: Server host key: ECDSA be:b1:53:76:aa:bf:65:ea:b4:1b:7a:8f:cc:7c:2a:79 
debug1: Host 'foobar.io' is known and matches the ECDSA host key. 
debug1: Found key in /root/.ssh/known_hosts:2 
Warning: Permanently added the ECDSA host key for IP address '12.34.56.78' to the list of known hosts. 
debug1: ssh_ecdsa_verify: signature correct 
debug1: SSH2_MSG_NEWKEYS sent 
debug1: expecting SSH2_MSG_NEWKEYS 
debug1: SSH2_MSG_NEWKEYS received 
debug1: Roaming not allowed by server 
debug1: SSH2_MSG_SERVICE_REQUEST sent 
debug1: SSH2_MSG_SERVICE_ACCEPT received 
debug1: Authentications that can continue: publickey 
debug1: Next authentication method: publickey 
debug1: Trying private key: ./sshkey/app-key.pem 
debug1: key_parse_private2: missing begin marker 
debug1: key_parse_private_pem: PEM_read_PrivateKey failed 
debug1: read PEM private key done: type <unknown> 
debug1: read_passphrase: can't open /dev/tty: No such device or address 
debug1: No more authentication methods to try. 

Permission denied (publickey). 

も絶対パスを使用してみました:

$ cat /builds/foobar/bar/sshkey/app-key.pem 
-----BEGIN RSA PRIVATE KEY----- 
...(the key)... 
-----END RSA PRIVATE KEY----- 

$ ssh -v -i /builds/foobar/bar/sshkey/app-key.pem [email protected] 
Permission denied (publickey). 

これらは、私が試したものです:gitlabのCIランナーのためのシェルexecutorを使用して

  • 試してみる - >成功
  • SSH - >
  • がローカルドッキングウィンドウコンテナにスクリプトを実行できませんでした手動で(CIではなく)ランナーインスタンスに入れて、シェルでスクリプトを実行する - >成功
  • sshをrunner instanに追加するCEは手動でドッキングウィンドウコンテナ内のスクリプトを実行します - 結論として>成功

- gitlabのCIで実行した場合にのみ失敗したので、私は物事を行うには気づいていない任意の追加の設定があるのだろうかこのように...

多くのありがとうございました!

本当の問題は、複数行の環境変数をエコー-INGの

で、引用符が必要とされています。 したがって、基本的にキーのすべての行は^ Mで終わります。これはgitlabのコンソールでは正しく表示されますが、実際にはsshで解析できません。

答えて

2

GilabCIで実行すると失敗した場合は、GitLab CIで使用されているユーザーが実行中のインスタンスでsshとして使用されたユーザーと同じでないことを意味します。

チェックするもう一つは、/etc/ssh/sshd_configPermitRootLoginAllowUsersである例えば "AWS SSH connection error: Permission denied (publickey)"

を参照してください。

このdebug1: key_parse_private2: missing begin marker appearsは、ユーザーのアクセスが制限されている場合でもキー認証が成功した後でもあります。リモートマシン上で手動のssh後

チェック:

tail -f -n 80 /var/log/auth.log 

OP DarkBtfin the commentsを追加します。

複数行の環境変数をエコー-INGの場合は、引用符が必要とされています。
基本的に、キーの各行は^Mで終わります。これはgitlabのコンソールで正しく表示されますが、実際にはsshで解析できません。

+0

gitlab CIドッカーエグゼキュータを使用する場合、ユーザーはrootです。 私はキーを.sshに入れていないので、sshコマンドでIDを "-i app-key.pem"と指定しました。そうすることに何か問題はありますか? – DarkBtf

+0

@DarkBtf唯一の問題は「where is app-key.pem」ですか?絶対パスで試してみることができますか( 'cat/full/path/to/app-key.pem'のように絶対パスが見えるようにするコマンドを追加してください) – VonC

+0

絶対パスを使ってみました)、依然として許可は拒否されました。 – DarkBtf

関連する問題