Як уникнути запиту парольної фрази кожного разу, коли я натискаю на Bitbucket


217

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

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

Відповіді:


337

Потрібно використовувати агент ssh. Коротка відповідь: спробуйте

$ ssh-add

перед натисканням. На запитання введіть свою парольну фразу.

Якщо ви ще не працюєте з SSH агентом, ви отримаєте таке повідомлення:

Could not open a connection to your authentication agent.

У цій ситуації ви можете запустити його і таким чином налаштувати своє оточення

eval $(ssh-agent)

Потім повторіть ssh-addкоманду.

Варто ознайомитись зі сторінкою агента ssh .


2
Який сенс evalможна було просто набрати ssh-agent?
Джеймс Макмахон

4
Він відображає деякі команди, які дозволяють вам використовувати його, і не виконує їх для вас; evalробить вилучення.
thepang

Не пов'язано з початковим запитанням, але якщо у вас все ще виникають у GitHub, Bitbucket тощо, переконайтеся, що ви використовуєте URL-адресу git / ssh, а не http, який постійно запитуватиме ім’я користувача + пароль.
Czechnology

А якщо у вас немає ключа за замовчуванням, або ви хочете додати кратні,ssh-add /path/to/key
hoosierEE

46

Спосіб вирішення цього питання є за допомогою ssh-agentта ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Після цього пароль зберігається для поточного сеансу. і його більше не запитають.


7
Більшість людей взагалі не хочуть, щоб їх перебирали за пропускні фрази.
коннексо

26

Я використовую Keychain для управління ssh-ключами. Він також доступний в Debian і, імовірно, в Ubuntu

apt-get install keychain

Ось сторінка пакунків брелоків Debian . Як бачите, проект не дуже активний, але працює для мене. Я також трохи прокоментував це в іншій відповіді тут


2
//, Це працювало для мене. Це набагато краще, ніж ssh-агент, оскільки мені не потрібно вводити свій пароль ключа ssh кожен раз, коли я відкриваю термінал .
Натан Басанес

@NathanBasane, ви говорите, що за допомогою keychain вам не потрібно вводити пароль ключа ssh щоразу, коли ви відкриваєте термінал? Як це налаштувати? тому що брелок продовжує запитувати пароль щоразу, коли я відкриваю термінал, хоча вперше відкриваю його після завантаження, хоча все ж. Я не хочу кожен раз вводити пароль.
m4l490n

@ m4l490n Ні, якщо ви використовуєте брелок, вам не потрібно вводити пароль ключа ssh щоразу, коли ви відкриваєте термінал. Але вам потрібно ввести його один раз після завантаження. Парольна фраза не зберігається на диску - це було б небезпечно.
Faheem Mitha

Для мене це запитує щоразу, коли я входжу (у мене є сховище git + ssh клавіші на віддаленому сервері, і кожен раз, коли я роблю "git pull", мені потрібно вводити пароль)
Martin Thoma,

@MartinThoma Це виглядає неправильно. Перевірте, чи правильно ви налаштували .ssh. Зокрема, чи правильно налаштована ваша оболонка? Якщо це все ще не працює для вас і ви не можете цього зрозуміти, можете задати питання.
Faheem Mitha

13

Створіть (або відредагуйте, якщо він існує) такий файл ~ / .ssh / config:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Але я використовую різну пару клавіш для кожної служби ...
connexo

@connexo ви можете замінити зірочку підстановки на своє індивідуальне ім’я хоста та "id_rsa" відповідним приватним ключем
ness-EE

1
Мені потрібно було додати IgnoreUnknown AddKeysToAgent,UseKeychainтрохи вище UseKeychain yes.
razmatRatio

1
Я отримую цю помилку: "Неправильний параметр конфігурації: usekeychain" у рядку "UseKeychain так".
m4l490n

@ m4l490n: схоже, що UseKeychainопція була додана у OpenSSH 7.1p2 (2016-02-28). Можливо, у вас є попередня версія. openssh.com/txt/release-7.2
Chus

6

Для зручності, оптимальний метод являє собою комбінацію з відповідей jmtd і Фахім .

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

Вікі Arch рекомендує ініціалізацію брелоки від /etc/profile.d/або вашого профілю оболонки, таких як .bash_profileабо .bashrc. Це є недоліком в тому, що він запускає брелок, як тільки ви відкриєте термінал.

Більш гнучкий підхід - поєднувати keychainконкретний tmuxсеанс. Отже, у .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... і тоді це лише випадок запуску захищеного tmuxсеансу як і коли потрібно (запускається з нав'язки клавіш):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Тепер ваш брелок буде ініціалізований лише один раз, коли ви розпочнете конкретний tmuxсеанс. Поки цей сеанс триває, ви зможете отримати доступ до цих sshклавіш і перейти до віддалених сховищ.


Як я змусив це працювати на віддаленій машині? Я змінив другий скрипт, щоб перевірити наявність $ SSH_CLIENT, і якщо він існує, не виконуйте urxvtc, просто tmux. Це працює, але проблема полягає у частині .bash_profile. Коли я вперше входжу в поле, він говорить "сервер не знайдено: з'єднання відмовлено", що є результатом "tmux ls". Потім, коли я виконую другий скрипт, tmux або починає новий сеанс, або приєднує до існуючого, але підказки ланцюжка ключів немає. Потім, коли я виходжу з сесії, там очікує запит брелока.
Джонямо

Я оновив відповідь на тихо виведення tmux, якщо немає сеансу.
Jasonwryan

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

Я думаю, я повинен перестати говорити брелок, оскільки брелок виконується лише в .bash_profile. Проблема полягає у виконанні ssh-add. Хоча, якщо запустити ssh-add вручну після створення сесії tmux, це працює.
Джонямо

1
Пропустіть другий скрипт і просто запустіть захищений сеанс tmux з цього .profile- ви отримаєте підказку для ключів, як тільки ви увійдете в систему.
Jasonwryan

0

Ви можете використовувати sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Вам просто потрібно додати, sshpass -p yourpassphraseперш ніж додавати звичайну sshкоманду.


2
Це звучить як справді дурна ідея. Хіба це не зробить ваш пароль чітким текстом в історії вашої оболонки?
Коннексо

Точно, але чи не слід також захищати сеанс паролем?
belka

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