Запропонуйте ssh-add бути тихим, якщо ключ вже є


16

Я хочу поставити ssh-add /path/to/special_keyвершину сценарію. Це добре працює, але це завжди вимагає ввести парольну фразу. Це дивно, і трохи дратує, оскільки він все ще просить пройти фразу навіть тоді, коли ssh-add -lпоказ ключів уже доданий.

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


Аналогічне запитання на superuser.com/q/325662
Darren Cook

Відповіді:


20

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

Спочатку візьміть відбиток пальця для вашої special_key:

ssh-keygen -lf /path/to/special_key  | awk '{print $2}'

Скажімо, цей відбиток пальців виглядає як 6d: 98: ed: 8c: 07: 07: fe: 57: bb: 19: 12: 89: 5a: c4: bf: 25

Потім, у верхній частині сценарію, ssh-add -lперевірте, чи завантажений цей ключ, перш ніж запропонувати його додати:

ssh-add -l |grep -q 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 || ssh-add /path/to/special_key

Ви можете скласти все це разом в один рядок, якщо бажаєте:

ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key  | awk '{print $2}'` || ssh-add /path/to/special_key

Однолінійний пристрій працює чудово, дякую!
Даррен Кук

1
Я вважаю цей спрощений однокласник трохи зрозумілішим і кращим, оскільки він уникає ssh-keygen(зрештою, я не хочу генерувати жодних ключів), а замість цього використовуйте ключ шляху:ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
ohruunuruus

1
ssh-keygenу відповіді не створюється ключ - те саме, що ssh-add -lу вашому прикладі насправді нічого не додає. Прапори змінюють поведінку команд, щоб вона точно не відповідала назві. Зауважте, що ці версії функціонально відрізняються - якщо перевірка за допомогою контуру та ключа на цьому шляху зміниться, ваша версія не підбере її. Версія у відповіді також виявить існуючий ключ незалежно від того, звідки він завантажений.
Richlv

5

Немає прямого способу перевірити за допомогою просто, ssh-addале ви можете скористатися ssh-keygenі деяким сценарієм, щоб перевірити.

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi

Вище сказане буде надруковано, yesякщо відбиток пальців, представлений файлом, /path/to/special_keyприсутній у ssh-add -lвисновку.

Приклад

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi
yes

Де вміст виводу з ssh-keygen -lf /path/to/special_keyвигляду виглядає приблизно так:

$ ssh-keygen -lf /path/to/special_key
2048 8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c  dev-servers (RSA)

І ми використовуємо `awk '{print $ 2}', щоб вибрати лише другий стовпець, який містить відбиток пальця, тобто:

8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c

Список літератури


3

У вас можуть бути конкретні причини ssh-addявного використання , але якщо ви просто хочете, щоб "я хочу, щоб мене запросили для моєї парольної фрази перший раз, коли я використовую ключ, але не після цього", Opensh має більш просте рішення:

Помістіть AddKeysToAgent yesу свій .ssh/configфайл.


Спасибі. Це, мабуть, було додано в ssh 7.2 (здається, що Ubuntu 18 є у версії 7.6).
Даррен Кук

Так, "AddKeysToAgent не підтримується моєю opensh версією" - це вагома причина використовувати ssh-add явно ;-)
Nate

0

ssh-add -K FILEдобре працював для мене на Mac.
На ньому все ще відображаються рядки "Ідентифікація додана:", але не вимагає проходу фрази.

З чоловічої сторінки:

-K При додаванні ідентифікацій кожна пропускна фраза також буде зберігатися в брелоку користувача. При видаленні тотожностей з -d кожна парольна фраза буде видалена з неї.

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