web-dev-qa-db-ja.com

GitLab CI内でSSHホストキーの検証に失敗しました

ローカル設定

_ssh-keygen_コマンドを使用して、公開および秘密SSHキーを作成しました。

私は、最初にローカルで秘密鍵をセットアップすることを決定しました。その後、リポジトリのgitlab CIでセットアップしました。

サーバーに公開鍵を設定しました(この場合、別のgitlabリポジトリですが、これは将来変更される可能性があり、質問には影響しません)。

次のコマンドを使用してローカルでサーバーと正常に通信しました(この場合はgit経由でSSHを使用していますが、将来的には変更される可能性があります):

_git clone [email protected]:...../......git
_

GitLab CIセットアップ

次に、gitlab CIで秘密鍵と通信をセットアップすることにしました。

私のリポジトリ内で、設定_->_継続的統合_->_変数に移動し、次の環境変数を追加しました。

  • _SSH_DEPLOY_PRIVATE_KEY_-ローカルで使用したものと同じ秘密鍵を使用しました
  • _SSH_KNOWN_HOSTS_
    • ローカルコンピュータの_gitlab.com_ファイルから_~/.ssh/known_hosts_既知のホストを取得しました
    • _gitlab.com,35.231.145.151 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY=_

次に、SSHを_.gitlab-ci.yml_内にセットアップします。

_script:
  - apt-get install openssh-client -y
  - eval $(ssh-agent -s)
  - echo "$SSH_DEPLOY_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
  - mkdir -p /.ssh && touch /.ssh/known_hosts
  - echo "$SSH_KNOWN_HOSTS" >> /.ssh/known_hosts
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
_

これは正常に機能しているようで、次のメッセージが表示されました:Identity added: (stdin) (runner@....)

次に、同じ_git clone_コマンドを追加してサーバーと通信しましたが、次のエラーで失敗しました:

_Cloning into '......'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
_

ローカルでのテストは引き続き機能します。上記と同じコマンドを使用してローカルでSSHをセットアップしました(ただし、代わりに_pacman -S openssh_を使用してインストールしました)。

どうすれば修正できますか?

編集

私はGitLab CIで_ssh-keyscan_を直接実行できることを認識しています。これで理論的に問題が解決されるはずですが、私が知っていることから、これは中間者攻撃を受けやすいです。より安全なソリューションを見つけようとしています。

編集2

_ssh-keyscan_をGitLab CIで直接実行すると、同じエラーメッセージが表示されます。

詳細な出力は同じです:

_$ GIT_SSH_COMMAND="ssh -vvv" git clone [email protected]:..../.....git deployed
Cloning into 'deployed'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
_

編集3

インターネットに接続されているようです。プラス_apt-get install_は、それ以外の場合は機能しません。

編集4

なぜこれがそんなに難しい仕事なのかわかりません。私は この記事 に従い、すべてを正しく行っています。他にも同様の質問がたくさんあるようですが、回答もありません。これは、私たちが制御できないGitLab CIの単なる問題ですか?

また、SSHサーバーが別のGitLabリポジトリであることにも関係していると考えています。 GitLab CIが同じネットワーク内のSSH接続をブロックしている可能性があります。理由はわかりませんが、可能性はあります。また、SSHなしで接続する方法もわかりません。

編集5

詳細出力は_GIT_SSH_COMMAND_を使用しても明らかに機能しなかったため、gitなしでssh接続を試みました。

_ssh -vvvv [email protected]
_

ログ出力:

_OpenSSH_6.7p1 Debian-5+deb8u5, OpenSSL 1.0.1t  3 May 2016
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.
debug2: ssh_connect: needpriv 0
debug1: Connecting to gitlab.com [35.231.145.151] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u5
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.8 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for Host "gitlab.com" from file "/root/.ssh/known_hosts"
debug3: load_hostkeys: loaded 0 keys
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected],arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected],arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1,[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1,[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
debug2: kex_parse_kexinit: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
debug2: kex_parse_kexinit: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: kex_parse_kexinit: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: setup [email protected]
debug1: kex: server->client aes128-ctr [email protected] none
debug2: mac_setup: setup [email protected]
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 f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35
debug3: load_hostkeys: loading entries for Host "gitlab.com" from file "/root/.ssh/known_hosts"
debug3: load_hostkeys: loaded 0 keys
debug3: load_hostkeys: loading entries for Host "35.231.145.151" from file "/root/.ssh/known_hosts"
debug3: load_hostkeys: loaded 0 keys
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
_

最後から2行目は、_/dev/tty_ファイルを使用して端末と通信しようとしていることを示しています。もちろん、このスクリプトは非インタラクティブなマナーで実行されているため、失敗します。端末からパスフレーズを要求するのではなく、キーを使用するべきではありませんか?

7
David Callanan

同じ秘密鍵を使用することはお勧めしません。セキュリティ上の理由と、他の問題を引き起こす可能性があるためです。また、authorized_keysファイルには、アクセスしたいサーバー上の公開鍵が含まれています。そうでないと、全体が機能しません。 this one ?のガイドラインに沿ってガイドに従っていると思います。

これが何かを願っています。

0
NightDice