Jak mohu spustit ssh-add automaticky bez výzvy k zadání hesla?

Chci komunikovat mezi několika počítači v mé síti (statický Ethernet) prostřednictvím SSH. Abych to mohl udělat, musím spustit ssh-add pokaždé, když se přihlásím na konkrétním stroji, jak to mohu udělat tak, aby to bylo nastaveno jednou a nepožadovalo mě přístupové heslo při každém přihlášení nebo restartovat počítač?

Vím, že existuje způsob, jak byste měli přidat nějaké řádky do souboru bash_profile, ale stále musím každé heslo zadávat čas, kdy restartuji / přihlásím se na konkrétní stroj.

if [ -z "$SSH_AUTH_SOCK" ] ; then eval `ssh-agent -s` ssh-add fi 

Komentáře

Odpověď

Toto je typický příklad kompromisu mezi bezpečností a pohodlí. Naštěstí existuje řada možností. Nejvhodnější řešení závisí na scénáři použití a požadované úrovni zabezpečení.

ssh-key s přístupovou frází, no ssh-agent

Nyní je třeba při každém použití klíče k ověření zadat přístupovou frázi. I když je to z bezpečnostního hlediska nejlepší volba, nabízí nejhorší použitelnost. To může také vést k tomu, že bude vybrána slabá přístupová fráze za účelem snížení zátěže opakovaného zadávání.

ssh-key s přístupovou frází, s ssh-agent

Přidáním následujícího do ~/.bash_profile se automaticky spustí ssh-agent a při přihlášení načtěte klíče ssh:

if [ -z "$SSH_AUTH_SOCK" ] ; then eval `ssh-agent -s` ssh-add fi 

Nyní je třeba zadat přístupovou frázi při každém přihlásit se. I když je to z hlediska použitelnosti o něco lepší, má to tu nevýhodu, že ssh-agent vyžaduje přístupovou frázi bez ohledu na to, zda má být klíč během relace přihlášení použit nebo ne. Každé nové přihlášení také vytvoří odlišnou ssh-agent instanci, která zůstane spuštěna s přidanými klíči v paměti i po odhlášení, pokud není výslovně zabita.

Zabití ssh_agent při odhlášení přidejte následující text do ~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi 

nebo do následujícího ~/.bash_profile

trap "test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`" 0 

Vytvoření více ssh-agent instancí se lze vyhnout vytvoření trvalého komunikačního soketu s agentem na pevném místě v systému souborů, například v odpovědi Collina Andersona . Jedná se o vylepšení oproti více agentům instance, pokud však není výslovně zabit, dešifrovaný klíč po odhlášení stále zůstává v paměti.

Na desktopech jsou ssh-agenti zahrnuti do desktopového prostředí, například Gnome Keyring SSH Agent , může být lepším přístupem, protože se obvykle dá udělat jako výzva k povolení fráze při prvním použití klíče ssh během relace přihlášení a dešifrovaný soukromý klíč uložte do paměti až do konce relace.

ssh- klíč s přístupovou frází, s ssh-ident

ssh-ident je nástroj, který může ssh-agent za vás spravovat a podle potřeby načítat identity. Přidává klíče pouze jednou podle potřeby, bez ohledu na to, kolik terminálů, ssh nebo přihlašovacích relací vyžaduje přístup k ssh-agent. Může také přidat a použít jiného agenta a jinou sadu klíčů v závislosti na hostiteli, ke kterému je připojen, nebo je vyvolán adresář ssh. To umožňuje izolaci klíčů při použití přeposílání agentů s různými hostiteli. Umožňuje také používat více účtů na webech, jako je GitHub.

Chcete-li povolit ssh-ident, nainstalujte jej a přidejte následující alias do svého ~/bash_profile:

alias ssh="/path/to/ssh-ident" 

klíč ssh s přístupovou frází, s keychain

keychain je malý nástroj, který spravuje ssh-agent vaším jménem a umožňuje, aby ssh-agent zůstal spuštěný i po ukončení relace přihlášení. Při následných přihlášeních se keychain připojí ke stávající ssh-agent instanci. V praxi to znamená, že přístupová fráze musí být zadána pouze při prvním přihlášení po restartu. Při následujících přihlášeních se použije nezašifrovaný klíč z existující instance ssh-agent.To může být také užitečné pro povolení autentizace RSA / DSA bez hesla v cron úlohách bez hesel ssh-keys.

Povolení keychain, nainstalujte jej a přidejte něco podobného do ~/.bash_profile:

eval `keychain --agents ssh --eval id_rsa` 

Z bezpečnostního hlediska pohled, ssh-ident a keychain jsou horší než ssh-agent instance omezené na dobu životnosti konkrétního sezení, ale nabízejí vysokou úroveň pohodlí. Kvůli zlepšení zabezpečení keychain přidávají někteří lidé do své ~/.bash_profile klíčenky možnost --clear. vyvolání. Tímto způsobem je třeba při přihlášení znovu zadat přístupové fráze, jak je uvedeno výše, ale cron úlohy budou mít i po odhlášení uživatele přístup k nezašifrovaným klíčům. keychain wiki stránka obsahuje více informací a příkladů.

ssh-key bez hesla

z hlediska zabezpečení je to nejhorší volba, protože soukromý klíč je zcela nechráněný pro případ, že by je vystaven. Toto je však jediný způsob, jak zajistit, že po restartu není nutné znovu zadat přístupovou frázi.

ssh-key s přístupovou frází, s ssh-agent, předání přístupové fráze do ssh-add ze skriptu

I když to může vypadat jako přímý nápad předat přístupovou frázi do ssh-add ze skriptu, např. echo "passphrase\n" | ssh-add, to není tak přímočaré, jak se zdá, protože ssh-add nečte přístupové heslo z stdin, ale otevře se /dev/tty přímo ke čtení .

Může to být fungoval s expect , nástrojem pro automatizaci interaktivních aplikace. Níže je uveden příklad skriptu, který přidává klíč ssh pomocí přístupové fráze uložené ve skriptu:

#!/usr/bin/expect -f spawn ssh-add /home/user/.ssh/id_rsa expect "Enter passphrase for /home/user/.ssh/id_rsa:" send "passphrase\n"; expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)" interact 

Všimněte si, že přístupová fráze je uložena v holém textu v skript je z bezpečnostního hlediska stěží lepší než mít ssh-klíč bez hesla. Pokud má být tento přístup použit, je důležité zajistit, aby skript expect obsahující přístupové heslo měl nastavena správná oprávnění, aby byl čitelný, zapisovatelný a spustitelný pouze klíčem vlastník.

Komentáře

  • Dobře, ale když vložím váš kód do ~ / .bash_profile, musím při každém přihlášení zadat heslo, ani to ‚ nechci. O bezpečnost se vůbec nestarám. echo “ pass \ n “ | ssh-add nefunguje ‚ nefunguje
  • @ user1607072 Jo, takto vypadá ssh-agent fragment v ~/.bash_profile se chová, jak je vysvětleno v odpovědi. Možná se budete chtít podívat na obslužný program keychain. V keychain musíte při prvním přihlášení po restartu zadat heslo, ale při dalších přihlášeních se keychain připojí ke stávajícímu ssh-agent instance s dešifrovaným klíčem v paměti. Kromě toho existuje ‚ možnost generování ssh-klíče bez přístupové fráze, ale to se samozřejmě nedoporučuje.
  • @ user1607072 I když bych silně navrhnout jeden z bezpečnějších přístupů, existuje způsob, jak předat přístupovou frázi do ssh-add ze skriptu. Důvod, proč echo "pass\n" | ssh-add nefunguje, je ten, že ssh-add nečte heslo z stdin, ale otevře se /dev/tty přímo ke čtení. Aktualizovali jsme odpověď tak, aby zahrnovala řešení tohoto problému, pomocí nástroje s názvem expect.
  • @ user1607072 Pro váš případ použití to může být trochu přehnané, ale Kerberos v kombinaci s podporou ssh GSSAPI lze použít také pro přihlášení ssh bez hesla. Odpovídající metoda ověřování v ssh se nazývá gssapi-with-mic. Obvykle se používá ve větších sítích, ale pokud o to máte zájem, mohlo by to být užitečné prozkoumat.
  • @ErickBrown: Již odpověděl zde . Jednotka agenta SSH by měla být při odhlášení zastavena, pokud máte ve správci přihlášení systemd deaktivovanou funkci uživatele. Pokud je povoleno přetrvávání uživatelů, instance uživatele systemd a jednotka agenta SSH zůstanou spuštěny i po ukončení poslední relace přihlášení.

Odpověď

Přidejte toto do ~/.bashrc a poté se odhlaste a zpět, aby se projevily.

 if [ ! -S ~/.ssh/ssh_auth_sock ]; then eval `ssh-agent` ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock ssh-add -l > /dev/null || ssh-add  

Toto by mělo vyžadovat pouze zadání hesla poprvé se přihlásíte po každém restartu. Dokud zůstane v provozu, bude opakovaně používat stejné ssh-agent.

Komentáře

  • velmi čisté , tímto způsobem máte spuštěného pouze jednoho agenta ssh (: Více agentů jako v @thomasNyman ‚ druhém řešení se mi zdá bezpečnostní riziko …
  • Po prozkoumání různých stránek a přečtení různých řešení se toto jeví jako nejjasnější, přímo k věci. Velmi pěkné. +1
  • lepší postup: `alias ssh = ssh-check-agent “ a nechte verzi check-agenta provést výše. tímto způsobem: a) získáte pouze jednoho agenta ab) získáte pouze agenta, pokud ho potřebujete
  • Myslím, že -s je výchozí, takže ‚ to již děláme.
  • Upozorňujeme, že ssh-add bez argumentů přidá ~/.ssh/id_rsa. Pokud jsou vaše soukromé klíče v jiném souboru, možná budete chtít předat ssh-add argumenty.

Odpovědět

Nesouvisí s otázkou OP, ale pro ostatní by to mohlo být užitečné: protože 7.2.0 ssh (1) má možnost, která umožňuje přidat klíč k ssh-agentovi při prvním ověření; tato možnost je AddKeysToAgent a lze ji nastavit na yes, no, ask nebo confirm v celém systému nebo ve vašem osobním .ssh/config souboru.

Reference : https://www.openssh.com/txt/release-7.2

Komentáře

  • Platí pro ty, kteří jsou v souboru .ssh/config noví: to platí pro ssh a vše, co používá ssh za ním, například scp, a lze jej provést na základě jednotlivých hostitelů.
  • Stále se mě ptá na heslo pokaždé, když se přihlásím a zkusím například git pull.
  • @trainosis Problém je v tom, že pravděpodobně nemáte spuštěnou instanci ssh-agenta, která by uchovávala dešifrované klíče v paměti pro budoucí použití. Při použití ssh-agenta byste měli zadat heslo pro daný klíč pouze jednou za relaci přihlášení.

Odpovědět

ssh-agent ukládá do mezipaměti různé odemčené klíče ssh, takže můžete mít klíče ssh chráněné hesly, aniž byste je museli zadávat pokaždé.

Aby bylo možné odemknout klíče do mezipaměti, je zjevně nutné tyto klíče odemknout. Chcete-li odemknout klíče, které jsou uzamčeny pomocí přístupové fráze, je zjevně nutné tyto přístupové fráze znát.

Jakákoli metoda, která nevyžaduje povolení od člověka (např. „Zadání hesla“), nejen že systém nejistý; také způsobí, že celý účel ssh-agenta nebude mít smysl.

Když už jsme to řekli, můžete jednoduše použít ssh-klíče, které nejsou chráněny heslem (na dotaz stiskněte Enter heslo během generování klíče). Jelikož neexistuje žádné heslo, ssh-agent vás nemusí žádat, abyste jej (ne) ukládali do mezipaměti.

Komentáře

  • Souhlasím, pokud jsou vaše klíče správně povoleny pouze pro uživatele, ssh-agent má oproti klíčům bez oprávnění malou výhodu. Líbí se mi ssh do přihlašovacího serveru a pak má tento server spoustu klíčů bez oprávnění, z nichž každý lze použít pouze k odemknutí jednoho dalšího serveru. přihlašovací server nedělá nic jiného, takže ‚ je mnohem těžší hacknout / spoof atd … ostatní servery nemají přístup pomocí hesla, jsou pouze klíče.

Odpověď

Toto řešení lze automatizovat pomocí hesla SSH.

  1. Vytvořte jednorázový skript, který vytiskne vaši přístupovou frázi na standardní výstup, např .:

     echo "echo MY_SSH_PASSWORD" > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password 

    Důležité: Zajistěte zkopírujete úvodní prostor do zabráníte ukládání hesla do své historie .

A použijte jednu z níže uvedených metod.

  • pomocí standardního přístupu:

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add - 
  • nebo pojmenovaný kanál :

    1. Vytvořit pojmenovaný kanál (můžete také vyzkoušet náhradu procesu ):

      mkfifo --mode 0600 ~/.ssh_fifo 
    2. Spustit ssh-add zadáním programu použitého pro ověření:

      cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo 

    Viz: man ssh-add a přečíst si více o SSH_ASKPASS.

Komentáře

  • echo my_passphrase je velká bezpečnostní díra. Nejprve poté, co jste jej zadali, je heslo ve formátu prostého textu v souboru historie toho, jaký shell jste kdy použili. A argumenty druhého příkazového řádku jsou světově čitelné na Unixu (ps -ef). Nikdy nedávejte hesla do argumentů příkazového řádku!
  • @ceving Přidání dalšího úvodního prostoru vyřeší problém se souborem historie. Přidány další informace.
  • @kenorb: To ‚ nevyřeší větší problém hesla viditelného v ps výstup. Soubor historie je obvykle stejně čitelný pouze vlastníkem, ale příkazové řádky jsou čitelné pro všechny uživatele v systému.

Odpovědět

Nedoporučuji vám ssh-add (který potřebuje otevřít ssh-agent) při přihlášení. Důvodem je, že nemůžete kontrolovat, kdy končí sekce ssh-agent, a můžete vytvořit bezpečnostní riziko když nemusíte používat klíčové soubory v jedné přihlašovací sekci.

Doporučuji spíše napsat skript, který otevře sub-shell sekce ssh-agenta, se všemi automaticky přidanými klíčovými soubory a bude vyvolán, když bylo potřeba použít ssh. Pokud byste to mohli přijmout, čtěte dál.

Měli byste dvě možnosti:

  1. Odeberte všechny přístupové fráze pro vaše klíče, které mají slabé zabezpečení v případě odcizení klíčových souborů. ( nedoporučuje se )

  2. Použijte stejnou přístupovou frázi pro své klíče. Když pak ssh-add keyfile1 keyfile2 ..., budete muset zadat přístupovou frázi pouze jednou pro každou sekci.

V obou případech můžete napsat takový skriptový soubor „ssh_keys_section.sh“, jak je uvedeno níže:

#!/bin/bash # This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once. # This agent ends when you type `exit` to close the sub-shell. exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash" 

Poznámky:

  • Příkaz ke změně nebo odstranění přístupové fráze: ssh-keygen -p -f keyfile
  • V rámci dílčího shellu můžete dokonce rozdělit více terminálů, které sdílejí stejné odemčené klíče, možná pomocí příkazu jako /path/to/yourterminal & (záleží na OS)

Komentáře

  • Např Ve Windows v rámci Cygwin /path/to/yourterminal & == > mintty &
  • Poznámka: Po použití ukončete relaci pomocí ctrl-d nebo exit, stejně jako jste vyvolali vnořenou bash shell a je třeba jej zavřít.

Odpovědět

if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then eval $(ssh-agent) ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock ssh_keys=$(find -E ~/.ssh -type f -regex ".*(rsa$|pem)") ssh_agent_keys=$(ssh-add -l | awk "{key=NF-1; print $key}") for k in "${ssh_keys}"; do for l in "${ssh_agent_keys}"; do if [[ ! "${k}" = "${l}" ]]; then ssh-add "${k}" > /dev/null 2>&1 fi done done 

Odpověď

Dříve jsem používal skript zmiňovaný steampowered, vytvořil jsem níže uvedený, protože nezanechává soubory ležet.

Práce pouze na zsh prostředí.

#!/usr/bin/env zsh AGENT_BIN=`which ssh-agent` AGENT_ADD_BIN=`which ssh-add` AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" "$1==user && $8==cmd{print $2;exit;}"` if [ -z "$AGENT_BIN" ]; then echo "no ssh agent found!"; return fi if [ "" -eq "$AGENT_PID" ]; then if read -sq "YN?Do you want to unlock your ssh keys?"; then echo "" output=`$AGENT_BIN | sed "s/echo/#echo/g"` eval $output $AGENT_ADD_BIN fi else for f in "/proc/"* do cmdline=`cat "$f/cmdline"` if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP "((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)"` export SSH_AGENT_PID=${f##*/} break; fi done fi 

Komentáře

  • “ Práce na pouze zsh shell „, dobře, ale proč vaše linka Shebang vyžaduje pouze “ sh „?

Odpovědět

SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed "s/^echo/#echo/" > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null #ps ${SSH_AGENT_PID} doesn"t work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi 

Poskytování kreditu zde: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

Toto řešení je také schváleno zde: http://mah.everybody.org/docs/ssh

Odpověď

Pokud jako správce hesel používáte mořského koníka … Což pravděpodobně jste; D

Další řešení, které dosáhne cíle, který hledáte, je jednoduše přidání kláves ssh k mořskému koni pro automatické odemknutí po přihlášení . Hlavní výhodou je to, že po přihlášení přes gdm nemusíte nikdy zadávat heslo pro klíče, ani při jakémkoli přihlášení, i když klíče mají heslo. Toto VYŽADUJE jak soukromý klíč, tak veřejný klíč. MUSÍ také dodržovat konvenci pojmenování mořského koníka. Výchozí nastavení je přijatelné (id_rsa pro soukromý klíč a id_rsa.pub pro veřejný klíč … Opravdu vše, co je privatekeyname a privatekeyname.pub )

Chcete-li přidat klíč ssh k mořskému koni pro automatické odemknutí po přihlášení; (na fedora25 si nejsem jistý, kde je cesta v jiných distribucích, i když je velmi pravděpodobně velmi podobná)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here 

Pro mě to bylo

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa 

(seahorse automaticky předpokládá, že veřejný klíč byl v mém případě id_rsa.pub)

Po provedení příkazu seahorse vyskočí a roztomilé pole hesla GTK pro zadání hesla pro soukromý klíč. nebo ponechejte pole prázdné, pokud jste vygenerovali klíč bez hesla.

Seahorse vás nevyzve, pokud bude vše v pořádku. Budete se muset pokusit ssh do cílového počítače.Poté vás mořský koník vyzve k opětovnému grafickému odemknutí klíče heslem (TENTO BUDE SE JEN JEDEN), ale tentokrát by to mělo vypadat trochu jinak; P (to je také část, kde mořský koník dělá nějakého mořského koníka, aby přidal kouzlo ssh) ) a nabídněte MOŽNOST k odemčení klíče při přihlášení, musíte zaškrtnout tuto možnost dosáhnout svého cíle.

Jen proto, že jsem nečetl všechny odpovědi, doporučuji před pokusem o odpověď vrátit zpět to, co vám všichni řekli, abyste provedli ssh-add. Jinak by to mohlo mít za následek něco špatného ke svým klíčům, idk.

Odpověď

Řešení jednotného přihlášení pro SSH by mě mohlo vést k pam_ssh .

Podle tohoto článku , koncept je:

Pokud pracujete s více stroji založenými na * nix prostřednictvím ssh, pravděpodobně vás už unavují nevýhody neustále musíte zadávat heslo pokaždé, když chcete vstoupit do jiného pole. Existuje bezpečný způsob, jak vám umožnit přístup ke každému stroji, ke kterému máte přístup ssh, aniž byste museli zadávat další heslo (jiné než to, kterým jste se původně přihlásili.)


Je to vlastně docela jednoduché, v zásadě stačí vytvořit pár veřejného / soukromého klíče, abyste se ověřili na svých dalších počítačích, a pak mít PAM vytvoří agenta, který po přihlášení načte vaše klíče, a poskytne tak řešení jednotného přihlášení pro přístup ke všem vašim vzdáleným počítačům. Tento průvodce vás provede nastavením.

Neověřil jsem, že by to skutečně fungovalo.

Odpověď

Přidejte toto do svého ~/.bashrc souboru:

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key 

Komentáře

  • Nechápu ‚, jak to souvisí s otázkou, která je o výzvě k zadání hesla při následném přihlášení.

Odpovědět

Chcete-li přidat (případně bez hesla) klíč a zajistit, aby ssh-add nevyzve k zadání hesla, ať už je to cokoli, i když běží pod X :

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null 

Stav ukončení označuje úspěch nebo neúspěch.

Odpověď

Zde je definitivní skript.

Aktualizujte $ PASSW a poté jej zkopírujte a vložte do svého terminálu.

# <sshpass> via typinator # Updated: 2017-01-18_21h36 # # apt-get update -y; apt-get install expect -qy # Pass this value to ssh-add PASSW="myfancypass123" # Define a name for this script THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh # Create a fresh directory to work from / Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la # Output our bash script file - BEGIN cat <<< " #!/bin/bash set -u # Stop if an unbound variable is referenced set -e # Stop on first error export HISTIGNORE="expect*"; # Normal CMDs echo && echo "The process should take about 10 seconds:" && echo eval "$(ssh-agent -s)"; sleep 0.5; # Define VAR passed when this bash-script was launched password="$@" # Launch the expect magic expect -c " spawn ssh-add /root/.ssh/id_rsa expect "?assword:" send \"$password\r\" expect "?password:" send \"$password\r\" expect eof" export HISTIGNORE=""; export password=""; " > $THIS_SCRIPT # Output our bash script file - END # Ensure we are in the right path cd ~/temp; ls -la; sleep 1; # Run the bash script chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password; # Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la 

Odpovědět

Nejlepším způsobem, jak vím, je použít přihlašovací skript PAM, který jsem upravil z předchozí práce, protože jsem v této otázce nenašel uspokojivou odpověď.

Vaše přístupová fráze se dostane uloženy zašifrované pomocí vašeho systémového hesla a funkce těžkého odvození. Při přihlášení se vaše systémové heslo používá k dešifrování vaší přístupové fráze a přidání k agentovi.

https://github.com/capocasa/systemd-user-pam-ssh

Výhodou všech ostatních prezentovaných řešení je, že kombinuje zabezpečení ekvivalentní ručnímu spuštění ssh-add při zavádění s nulovým úsilím. Vyžaduje žádné další nástroje a má jednu další závislost, která je již ve výchozím nastavení nainstalována na většině systémů (OpenSSL).

Odpověď

Moje nastavení pro macOS je následující (v .zshrc nebo .bash_profile pro bash lidi):

Část || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] je v systému macOS nezbytná, protože výchozí hodnota je /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners. Jinak @Thomas Nyman komplexní odpověď selže, protože $SSH_AUTH_SOCK je vždy na něco nastaven.

Pak v .zlogout (nebo .bash_logout pro bash lidi):

if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi 

Testováno na macOS Mojave 10.14.5

Odpověď

Toto velmi dobře vysvětlil GitHub na Automatické spuštění ssh-agenta na Gitu pro Windows , což zase funguje i pro Linux.

ssh-agent můžete spustit automaticky, když otevřete bash nebo Git shell. Zkopírujte následující řádky a vložte je do svého ~/.profile nebo ~/.bashrc souboru v prostředí Git:

 env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env  

Pokud váš soukromý klíč není uložen na jednom z výchozích umístění (například ~/.ssh/id_rsa), budete muset svému ověřovacímu agentovi SSH sdělit, kde jej najdete. Chcete-li přidat klíč do ssh-agent, zadejte ssh-add ~/path/to/my_key.

Tip: Pokud chcete ssh-agent po nějaké době svůj klíč zapomenout, můžete nakonfigurujte jej tak, že spustíte ssh-add -t <seconds>.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *