Bash скрипт не принимает efect ater пароль - PullRequest
1 голос
/ 06 февраля 2020

Я не хочу автоматически входить в агент s sh, но только эффективный сценарий простого выполнения в файле 'sh':

#!/bin/bash
clear
echo " >> Start the ssh-agent in the background."
eval $(ssh-agent -s)
echo " >> Add SSH private key to the ssh-agent"
ssh-add ~/.ssh/id_rsa
echo " >> List of ssh agents"
ssh-add -l
echo " >> Attempts ssh to GitHub"
ssh -T git@github.com

он вызывает запрос пароля и ждет для того, чтобы быть введенным, даже не в доме реж. git сообщить, что «Идентификация добавлена» и «Вы успешно аутентифицированы»

, но проблема возникает после попытки установить связь с Github - «git pu sh» или команда «pull» не дает никакого положительного эффекта:

sign_and_send_pubkey: signing failed: agent refused operation
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

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

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

ssh-add ~/.ssh/id_rsa

вводить фразу-пароль, а затем она позволяет мне успешно общаться с Github. Что не так в приведенном выше сценарии?

Мой контекст:

OS name: "linux", version: "4.15.0-76-generic", arch: "amd64", family: "unix"

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

ssh-agent работает, устанавливая кучу переменных среды, чтобы сообщить вашей оболочке, как с ней взаимодействовать. Он печатает их в STDOUT и eval $(ssh-agent -s) превращает их в переменные окружения. Важным является SSH_AUTH_SOCK, который указывает на файл сокета, используемый для связи с агентом.

$ echo $SSH_AUTH_SOCK
/tmp/path/to/the/socket

Переменные среды сохраняются только для текущего процесса и его дочерних элементов , Ваша программная оболочка выполняется в новом процессе. Любые переменные окружения, установленные в вашей программе оболочки d ie с помощью программы оболочки. Ваша оболочка не будет знать, как разговаривать с агентом.

У вас есть два варианта выбора.

Во-первых, вместо выполнения вашей программы оболочки вы можете source ее. Это запускает его как последовательность команд оболочки в вашей текущей оболочке, как если бы вы их набирали. Переменные окружения, которые устанавливаются сценарием, сохранятся.

Во-вторых, и лучше, если вы начнете входить в систему, вы должны запустить ssh-agent. Существует способов сделать это в зависимости от вашей операционной системы . Возможно, у вас уже есть один работает. Проверьте $SSH_AUTH_SOCK.


PS echo " >> List of ssh agents" должно быть echo " >> List of ssh keys"

0 голосов
/ 06 февраля 2020

Мне удалось решить эту проблему с помощью Funtoo keychain . Я поместил вызов в связку ключей в моем .bash_profile, чтобы при первом входе в систему он запрашивал ключевую фразу, но не каждый раз. У него есть возможность требовать определенные ключи в агенте и запрашивать вас, только если их нет.

Вот соответствующие строки из моего .bash_profile:

keychain --inherit any ~/.ssh/id_rsa_github
. ~/.keychain/$HOSTNAME-sh

Опция --inherit any указывает цепочке для ключей наследовать любой s sh -агент, который уже присутствует (например, системный, или уже запущенный, или гном-брелок, или что там у вас). Если ни один не присутствует, он запустит один. Затем цепочка для ключей пишет сценарий оболочки в моем домашнем каталоге (~/.keychain/$HOSTNAME-sh), который мой источник .bash_profile (с командой . выше). Второй аргумент цепочки для ключей (~/.ssh/id_rsa_github выше) - это ключ, который необходимо загрузить. При первом запуске цепочки для ключей он видит, что ключ отсутствует в агенте, поэтому запрашивает пароль. При последующих запусках он обнаруживает наличие ключа и не запрашивает пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...