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
- podobné této otázce stackoverflow.com/questions/18880024/start-ssh-agent-on-login
- stackoverflow.com/a/52671286/217408 to vyřešilo, abych předal přístupovou frázi z bitwarden
- @steampowered ano – ale myslím, že nejlepší zde uvedená odpověď je lepší a Unix SE je vhodnější místo pro tuto otázku
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ý programkeychain
. Vkeychain
musíte při prvním přihlášení po restartu zadat heslo, ale při dalších přihlášeních sekeychain
připojí ke stávajícímussh-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, žessh-add
nečte heslo zstdin
, 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ázvemexpect
. - @ 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ředatssh-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í prossh
a vše, co používássh
za ním, napříkladscp
, 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.
-
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 :
-
Vytvořit pojmenovaný kanál (můžete také vyzkoušet náhradu procesu ):
mkfifo --mode 0600 ~/.ssh_fifo
-
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 oSSH_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:
-
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 )
-
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
neboexit
, stejně jako jste vyvolali vnořenoubash
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>
.