30

Я использую ssh на удаленном хосте (linux, fedora) и хочу выполнить там ssh-операцию (git with bitbucket). На этой машине работает ssh-agent,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

но когда я хочу мерзнуть, мне нужно ввести пароль

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Примечание: если я работаю на этой машине локально, он не попросит меня ввести фразу-пароль

6 ответов6

65

На мой взгляд, лучший способ использования SSH

Перед использованием Git добавьте ваш ключ в ssh-agent

Запустите ssh-agent, если он не запущен:

$ eval `ssh-agent -s`

Добавьте свой закрытый ключ, используя ssh-add

$ ssh-add ~/.ssh/id_rsa_key
Введите кодовую фразу для /home/user/.ssh/id_rsa_key:
Идентификация добавлена: /home/user/.ssh/id_rsa_key
(/Home/user/.ssh/id_rsa_key)

Проверьте, добавлен ли ключ (параметр является строчной буквой L):

$ ssh-add -l
2048 55:96:1a:b1:31:f6:f0:6f:d8:a7:49:1a:e5:4c:94:6f
/home/user/.ssh/id_rsa_key (RSA)

Попробуйте подключиться к вашему Git-серверу:

$ ssh git.example.com

Теперь вы можете использовать Git без дополнительных парольных фраз.

Другие способы

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

16

Если у вас уже запущен ssh-agent вы можете добавить ключ, и вам придется вводить ключевую фразу один раз и только один раз для этого сеанса.

ssh-add ~/.ssh/id_rsa

Вы не говорите, какую операционную систему вы используете, но если это Linux и Gnome, то приложение "Пароли и ключи" (имя CLI: seahorse) может управлять ими, поэтому они разблокируются при входе в систему (пароль не требуется) ). В других средах рабочего стола Linux есть свои менеджеры. Я не уверен, что другие ОС здесь делают.

2

Программа ssh-add запускает агент, который может хранить (и предоставлять) вашу фразу-пароль. Способ использовать его удаленно - в родительской оболочке вашей интерактивной оболочки (чтобы агент не останавливался).

Вот несколько связанных вопросов:

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

  • запускает ssh-agent
  • запускает ssh-add
  • добавляет ваш ключ
  • запускает команду, которую вы хотите.

Слабым местом является второй шаг: вам все равно будет предложено ввести ключевую фразу, если только вы не ослабите свою безопасность, используя ключ без парольной фразы. Некоторые люди делают это, большинство людей советуют против.

2

Основная причина запроса пароля состоит в том, что ваш ключ зашифрован, сравните эти два:

  • не зашифрован

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • зашифрованная

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Таким образом, вы должны сделать одно из следующего:

  1. Если он зашифрован, вы можете попытаться удалить шифрование.
  2. Вы используете неправильный ключ. Если вы хотите использовать другой ключ, укажите другой файл или отредактируйте ваш ~/.ssh/config и укажите другой файл идентификации (IdentityFile).
  3. Запустите ssh-add -l чтобы получить список всех ваших идентификаторов (затем сравнить с локальными) и дважды проверить Stash, если вы используете правильные ключи (они существуют в конфигурации Stash).
  4. Если вы знаете ключевую фразу и хотите ее автоматизировать, попробуйте следующий обходной путь:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Поиск проблемы:

  1. Дважды проверьте, работает ли ваш SSH-агент (eval "$(ssh-agent -s)").
  2. Перезапустите git с помощью: GIT_TRACE=1 git pull или с помощью GIT_SSH_COMMAND="ssh -vv" (Git 2.3.0+), чтобы снова отладить вашу команду.
  3. Вы можете попытаться обойти запрос пароля (который перенаправит его в true), но я не думаю, что это поможет. Если это требует, есть причина для этого, и это в основном требуется.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
0

Вы можете легко удалить ключевую фразу вашего ключа, используя следующую команду

ssh-keygen -p

В первом приглашении введите путь к файлу (или нажмите Enter, чтобы изменить значение по умолчанию). Во втором приглашении введите старую фразу-пароль. Следующее приглашение, просто нажмите Enter, чтобы снять пароль.

Похоже, это самый простой способ!

0

Вы по-прежнему будете получать запрос пароля для расшифровки закрытого ключа, даже если он загружен в ssh-agent пока соответствующий открытый ключ SSH не будет добавлен в удаленный ~/.ssh/authorized_keys .

Воспроизвести:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Достаточно запутанно. Пароль удаленного входа SSH будет достаточно в этом случае.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .