4

With the following Dockerfile:

FROM nexylan/php-dev:7.1-alpine

COPY entrypoint.sh /
RUN chmod u+x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

WORKDIR /code

CMD ["tail", "-f", "/dev/null"]

(The entrypoint does nothing related to the issue).

And the definition on docker-compose:

version: '2'

services:
  data:
    image: alpine
    volumes:
      - .:/code

  console:
    build: docker/php-console
    volumes_from:
      - data
    env_file:
      - .env

If I run on my local Ubuntu computer:

docker-compose up -d
docker-compose exec -T console ssh -o StrictHostKeyChecking=no -i tests/fixtures/ssh/key -T [email protected]

It will work with the following message:

Hi xXx! You've successfully authenticated, but GitHub does not provide shell access.

But not on my GitLab CI runner instance, with the following configuration:

image: docker

services:
  - docker:dind

before_script:
  - docker info
  - apk add --update bash python py-pip python-dev
  - pip install docker-compose
  - ./configure
  - docker-compose up -d
  - docker-compose ps
  - docker-compose exec -T console make install

stages:
  - test

test:
  stage: test
  tags: [docker-privileged]
  script:
    - echo ${SSH_PRIVATE_KEY} > tests/fixtures/ssh/key
    - echo ${SSH_PUBLIC_KEY} > tests/fixtures/ssh/key.pub
    - chmod 600 tests/fixtures/ssh/*
    - docker-compose exec -T console ls -l tests/fixtures/ssh/
    - docker-compose exec -T console ssh -o StrictHostKeyChecking=no -i tests/fixtures/ssh/key -T -vvv [email protected]

The keys are here and are exactly the same as my local, but the command fail to connect with the following -vvv log result:

OpenSSH_7.2p2-hpn14v4, OpenSSL 1.0.2k  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "github.com" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to github.com [192.30.253.112] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file tests/fixtures/ssh/key type 1
debug1: key_load_public: No such file or directory
debug1: identity file tests/fixtures/ssh/key-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2-hpn14v4
debug1: Remote protocol version 2.0, remote software version libssh_0.7.0
debug1: no match: libssh_0.7.0
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to github.com:22 as 'git'
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: [email protected],[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected],zlib
debug2: compression stoc: none,[email protected],zlib
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: host key algorithms: ssh-dss,ssh-rsa
debug2: ciphers ctos: [email protected],aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc
debug2: ciphers stoc: [email protected],aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc
debug2: MACs ctos: hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib,[email protected]
debug2: compression stoc: none,zlib,[email protected]
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ssh-rsa SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS received
debug2: key: tests/fixtures/ssh/key (0x56053d865c20), explicit
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: tests/fixtures/ssh/key
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp SHA256:3aoR/R1oBDYb0QucuGCJfBgIWW4DE2P4DjuWwgtQg/k
debug3: sign_and_send_pubkey: RSA SHA256:3aoR/R1oBDYb0QucuGCJfBgIWW4DE2P4DjuWwgtQg/k
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

I already tried this solution for /dev/tty issue, but no success!

Plus, as it's a Docker image, the environment should be the same, should not be? Why this is working on my local computer and not GitLab CI runner?

1 Answer 1

2

On your ubuntu you're presumably connected as a local tty whereas the GitLab CI docker has no tty exactly as the error implies.

When you use the command

docker-compose exec -T

This disables the allocation of a ptty therefor openssh sees no tty to gather input from for keyboard interactive passwords. https://docs.docker.com/compose/reference/exec/ The server requested this during the handshake so the ssh client will attempt to do it.

Because the -d option was not used this command will use the existing tty if there is one which explains why it works on your local Ubuntu machine where a tty would likely automatically be created.

6
  • It looks right, but I have to use this option. Otherwise, it will produce something like this: pastebin.com/nDcp2k26 Plus, the ssh key does not need a passphrase. Can't we avoid the pty usage? Commented Dec 24, 2017 at 12:14
  • Well, I figured out how to make it working, but now it's always asking for a passphrase. It's an another issue IMO so: unix.stackexchange.com/q/412827/173927 Commented Dec 24, 2017 at 16:26
  • 1
    @Soullivaneuh Given the information in your question I can only say the server is asking for a keyboard interactive password. I'm not sure how you were able to bypass it in other instances. Also it does the same thing for me when I try it. Commented Dec 24, 2017 at 19:28
  • Why the server would ask for a password when the connection come form GitLab and not form my computer? It makes no sense. :-/ Commented Dec 26, 2017 at 15:51
  • 1
    @Soullivaneuh It's just how they decided to configure their server. Who knows. Commented Dec 27, 2017 at 22:44

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.