ssh_askpass: exec (/usr/bin/ssh-askpass): в разрешении на такой файл или каталог отказано, пожалуйста, повторите попытку

#git #bitbucket #autodeploy

#git #bitbucket #автоматическое развертывание

Вопрос:

Я хочу запустить pipline на Bitbucket. Я сделал все необходимые настройки. Я установил ssh_askpass. Я использую Ubuntu 18.

Однако я получаю сообщение об ошибке, приведенное ниже.

 ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
Permission denied, please try again.
  

Мой файл bitbucket-pipelines.yml:

 pipelines:
  default:
    - step:
        deployment: staging
        caches:
          - composer
        script:
          - ssh -T root@142.93.143.146
          - eval `ssh-agent -s` amp;amp; ssh-add ~/.ssh/id_rsa amp;amp; ssh-add -l
          - cd /var/www/backoffice/
          - git checkout master 
          - git pull origin master 
          - sudo php artisan optimize 
          - sudo composer dump-autoload
          - echo 'Deploy finished....'
  

Комментарии:

1. Чего вы пытаетесь достичь? IIRC, ssh-askpass предназначен для пользователей GUI, чтобы они могли вводить свою кодовую фразу более удобным способом. Я не уверен, что это имеет смысл для того, что вы делаете. Во всяком случае, похоже, что вы должны использовать файл authorized_keys ssh для помощи в развертывании. Еще лучше было бы иметь какой-нибудь прослушиватель webhook , который можно было бы подключить и выполнить развертывание, но вы могли бы не получить всю обратную связь, которую хотите.

Ответ №1:

Вы не сможете использовать какую-либо программу с графическим интерфейсом, подобную ssh-askpass , в системе CI, потому что в системах Linux CI графический интерфейс недоступен.

Если вы хотите использовать SSH-ключ в системе CI, вам следует использовать тот, у которого нет установленного пароля, и сохранить его в секретном хранилище вашей системы CI, затем скопировать его в файл и использовать. OpenSSH намеренно не предоставляет способа программного считывания пароля.

Обратите внимание, что если у вас есть только один SSH-ключ без пароля, вам не нужен ssh-agent или ssh-add вообще. Предполагая, что содержимое вашего закрытого ключа находится в переменной SSH_KEY (например, из-за секретного хранилища вашей системы CI), вы можете просто сделать это:

 echo "$SSH_KEY" > ~/.ssh/id_rsa
ssh root@142.93.143.146 'echo hello from the remote machine`
  

Вы не захотите запускаться ssh без команды, поскольку это попытается запустить интерактивный сеанс, который вам не будет полезен. Если ваша цель — использовать Git для передачи данных по SSH-соединению, то вам вообще не нужно запускать ssh .

Наконец, обратите внимание, что вы, вероятно, захотите записать информацию о ключе хоста удаленной системы в файл как часть вашего конвейера, либо из вашего конвейера, либо секретно, потому что SSH не будет подключаться, если ключ хоста не является надежным. Вы можете получить эту информацию, выполнив команду, подобную этой: ssh-keyscan github.com 2>/dev/null . Затем вы можете взять этот вывод и вставить его в свой known_hosts файл следующим образом:

 echo "github.com ssh-rsa AAAA...truncated" > ~/.ssh/known_hosts
  

Это гораздо безопаснее, чем отключить строгую проверку ключа хоста.

Комментарии:

1. Спасибо за ответ. Я не знаю, зачем использовать «ssh_askpass». Я использую Bitbucket. Я хочу сделать запрос на извлечение после завершения отправки. Я все еще получаю ошибку. Я не смог найти серьезного ответа в Интернете.

2. Это совершенно отдельный вопрос, поэтому, пожалуйста, задайте его в новом вопросе. Возможно, у меня нет места для ответа на это в комментариях.

Ответ №2:

При настройке конвейерных развертываний через Bitbucket вам нужно убедиться, что вы обновили Bitbucket с использованием отпечатков пальцев каждого сервера. Недавно я обнаружил, что если вы этого не сделаете, вы получите ошибку ssh_askpass, которая немного вводит в заблуждение.

Чтобы добавить отпечаток сервера, перейдите в «Настройки хранилища», затем прокрутите вниз до раздела «Конвейер» слева и нажмите «Ключи SSH».

На странице Ключей SSH прокрутите страницу вниз, и вы увидите раздел под названием «Известные хосты».

Введите IP-адрес сервера и нажмите кнопку «Fetch», чтобы Bitbucket извлек отпечаток пальца. Подождите секунду, и он заполнит отпечаток в текстовом поле справа от адреса хоста. Как только это будет сделано, нажмите кнопку, чтобы добавить хост в список известных хостов.

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

Ответ №3:

Я столкнулся с аналогичной ошибкой, используя VS Code для обмена данными с репозиторием git на локальной сборке Azure DevOps Server. Я устранил проблему с помощью

  1. Замена ssh URL на http url в .git/config файле.
 #unedited
[remote "origin"]
    url = ssh://X.X.X.X:22/theproject/_git/serverThing
    fetch =  refs/heads/*:refs/remotes/origin/*
|update
|this
V
#edited
[remote "origin"]
    url = http://X.X.X.X/theproject/_git/serverThing
    fetch =  refs/heads/*:refs/remotes/origin/*
  
  1. Выполнение $ git fetch . Здесь введены имя пользователя и пароль.

  2. Затем меняем .git/config файл обратно на ssh URL.

 #edited for resetting known_host key file.
[remote "origin"]
    url = http://X.X.X.X/theproject/_git/serverThing
    fetch =  refs/heads/*:refs/remotes/origin/*
|update
|this
V
#final form
[remote "origin"]
    url = ssh://X.X.X.X:22/theproject/_git/serverThing
    fetch =  refs/heads/*:refs/remotes/origin/*
  
  1. Выполните другое $ git fetch — это приведет к обновлению файла ключа .ssh/known_host.
 The authenticity of host 'X.X.X.X (X.X.X.X)' can't be established.
RSA key fingerprint is SHA256:noisehash.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'X.X.X.X' (RSA) to the list of known hosts.
  

Я надеюсь, это поможет.