Использование ключа SSH для рабочих потоков данных для извлечения приватной библиотеки - PullRequest
11 голосов
/ 24 мая 2019

Я настраиваю задание потока данных, и для этого задания работникам нужен доступ к частному хранилищу битовых корзин, чтобы установить библиотеку для обработки данных.Чтобы предоставить доступ к работникам потока данных, я настроил пару ключей SSH (публичный и приватный).Мне удалось получить закрытый ключ на моего работника потока данных.При попытке установить пакет через git + ssh я получаю сообщение об ошибке Host key verification failed.

Я пытался найти файл .ssh/known_hosts в рабочем потоке данных, но это не так простона обычной виртуальной машине.

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

mkdir -p ~/.ssh
chmod 0700 ~/.ssh
ssh-keyscan bitbucket.org > ~/.ssh/known_hosts

Я все еще получаю ошибку Host key verification failed.

Альтернативное предлагаемое исправление для этой проблемы - запустить ssh-keygen -R bitbucket.org, но затем я получаю следующую ошибку: mkstemp: No such file or directory

Для Dataflow Python SDK вам необходимо упаковать свой код с setup.py,Все команды, которые должны быть выполнены при запуске работника, записываются с subprocess.Popen.Список команд выглядит следующим образом:

CUSTOM_COMMANDS = [
    # decrypt key encrypted key in repository via gcloud kms
    ['gcloud', '-v'],
    ['gcloud', 'kms', 'decrypt', '--location', 'global', '--keyring',
     'bitbucketpackages', '--key', 'package', '--plaintext-file',
     'bb_package_key_decrypted', '--ciphertext-file', 'bb_package_key'],
    ['chmod', '700', 'bb_package_key_decrypted'],
    # install git & ssh
    ['apt-get', 'update'],
    ['apt-get', 'install', '-y', 'openssh-server'],
    ['apt-get', 'install', '-y', 'git'],
    # add bitbucket.org as known host
    ['mkdir', '-p', '~/.ssh'],
    ['chmod', '0700', '~/.ssh'],
    ['ssh-keyscan', 'bitbucket.org', '>', '~/.ssh/known_hosts'],
    # other attempts to fix it
    # ['ssh-keygen', '-R', 'bitbucket.org']
    # pip install
    ['sh', '-c', 'GIT_SSH_COMMAND="ssh -i ./bb_package_key_decrypted" pip install git+ssh://git@bitbucket.org/team/repo.git'],
] 

1 Ответ

4 голосов
/ 24 мая 2019

Попробуйте обновить ssh-keyscan, чтобы записать в какой-нибудь временный путь, а затем передать известное расположение файла хостов как часть GIT_SSH_COMMAND. Например, я бы обновил ваш скрипт так:

CUSTOM_COMMANDS = [
    # decrypt key encrypted key in repository via gcloud kms
    ['gcloud', '-v'],
    ['gcloud', 'kms', 'decrypt', '--location', 'global', '--keyring',
     'bitbucketpackages', '--key', 'package', '--plaintext-file',
     'bb_package_key_decrypted', '--ciphertext-file', 'bb_package_key'],
    ['chmod', '700', 'bb_package_key_decrypted'],
    # install git & ssh
    ['apt-get', 'update'],
    ['apt-get', 'install', '-y', 'openssh-server'],
    ['apt-get', 'install', '-y', 'git'],
    # add bitbucket.org as known host
    ['mkdir', '-p', '~/.ssh'],
    ['chmod', '0700', '~/.ssh'],
    ['ssh-keyscan', 'bitbucket.org', '>', '/tmp/bit_bucket_known_hosts'],
    # other attempts to fix it
    # ['ssh-keygen', '-R', 'bitbucket.org']
    # pip install
    ['sh', '-c', 'GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/tmp/bit_bucket_known_hosts -i ./bb_package_key_decrypted" pip install git+ssh://git@bitbucket.org/team/repo.git'],
] 
...