як уникнути запитання "Введіть пароль для ключа", коли я роблю ssh операцію на віддаленому хості?


45

Я сш в віддалений хост (Linux, fedora) і хочу там зробити ssh-операцію (git with bitbucket). На цій машині працює ssh-агент,

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

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

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

Примітка: якщо я працюю на цьому апараті локально, він не вимагає ввести пароль


1
Я не використовував його, але є команда ssh-add, яка, на мою думку, використовується для подібних речей
barlop

Відповіді:


82

На мій погляд, найкращий спосіб використання ssh

Перш ніж використовувати Git, додайте ключ до ssh-агента

Запустіть ssh-агент, якщо його не запустили:

$ 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


але я використав Git, щоб додати свій ключ до ssh-агента, як тоді це зробити? дякую
Лілія

@lily Вибачте, я не розумію вашого питання.
Роман

1
Це рішення, яке працювало на мене.
Skatox

2
Як зробити це стійким? Просто вкласти це .bashrc?
морська риба

1
FYI, evalпотрібний, оскільки він видає команди, які експортують змінні середовища, такі як SSH_AUTH_SOCK, які потрібні. unix.stackexchange.com/questions/351725/…
wisbucky

21

Якщо ви вже ssh-agentпрацюєте, ви можете додати ключ, і вам доведеться ввести парольну фразу один раз і лише один раз для цього сеансу.

ssh-add ~/.ssh/id_rsa

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


3

Основна причина запиту парольної фрази полягає в тому, що ваш ключ зашифрований, порівняйте ці два:

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

    $ 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).
  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
    

2

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

Ось кілька пов'язаних питань:

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

  • починається ssh-agent
  • починається ssh-add
  • додає ваш ключ
  • запускає потрібну вам команду.

Слабка сторона - другий крок: вам все одно буде запропоновано ввести парольну фразу, якщо тільки ви не послабите захист, використовуючи ключ, який не має парольної фрази . Деякі люди роблять це, більшість людей радять проти.


ssh-addне запускає агент. Він підключається до вже запущеного агента.
Ams

Дякую - я звик робити це в окремих сценаріях і не помітив пропущену частину.
Томас Дікі

0

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

ssh-keygen -p

У першому запиті введіть шлях до файлу (або натисніть клавішу 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.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.