Hur kan jag köra ssh-add automatiskt utan en lösenordsfråga?

Jag vill kommunicera mellan flera datorer i mitt nätverk (statisk Ethernet) via SSH. För att göra det måste jag köra ssh-add varje gång jag loggar in på en specifik maskin, hur kan jag göra det så att det ställs in en gång och det inte ber mig om lösenfrasen varje gång jag loggar in eller starta om min maskin?

Jag vet att det finns ett sätt att lägga till några rader i bash_profile -filen, men jag måste fortfarande skriva lösenordet varje gång gång jag startar om / loggar in på en specifik maskin.

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

Kommentarer

Svar

Detta är ett typiskt exempel på en avvägning mellan säkerhet och bekvämlighet. Lyckligtvis finns det ett antal alternativ. Den lämpligaste lösningen beror på användningsscenariot och önskad säkerhetsnivå.

ssh-key med lösenfras, ingen ssh-agent

Nu måste lösenfrasen anges varje gång nyckeln används för autentisering. Även om detta är det bästa alternativet ur säkerhetssynpunkt, erbjuder det den sämsta användbarheten. Detta kan också leda till att en svag lösenfras väljs i ordning för att minska bördan med att ange den upprepade gånger.

ssh-tangent med lösenfras, med ssh-agent

Att lägga till följande i ~/.bash_profile startar automatiskt ssh-agent och ladda ssh-nycklarna vid inloggning:

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

Nu måste lösenfrasen anges varje gång logga in. Även om det är lite bättre ur ett användbarhetsperspektiv har detta den nackdelen att ssh-agent uppmanar till lösenfrasen oavsett om nyckeln ska användas eller inte under inloggningssessionen. Varje ny inloggning skapar också en distinkt ssh-agent -instans som förblir igång med de tillagda nycklarna i minnet även efter utloggning, såvida det inte uttryckligen dödas. ”e880c8eccc”>

vid utloggning, lägg till följande i~/.bash_logout

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

eller följande till ~/.bash_profile

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

Att skapa flera ssh-agent instanser kan undvikas genom skapa ett beständigt kommunikationsuttag till agenten på en fast plats i filsystemet, till exempel i Collin Anderson ”svar . Detta är en förbättring jämfört med att leka flera agenter till exempel, om inte den avkrypterade nyckeln uttryckligen dödas, fortfarande finns kvar i minnet efter utloggning.

På stationära datorer ingår ssh-agenter som ingår i skrivbordsmiljön, till exempel > Gnome Keyring SSH Agent , kan vara ett bättre tillvägagångssätt eftersom de vanligtvis kan göras för att be om passet fras första gången ssh-nyckeln används under en inloggningssession och lagra den dekrypterade privata nyckeln i minnet till slutet av sessionen.

ssh- nyckel med lösenfras, med ssh-ident

ssh-ident är ett verktyg som kan hantera ssh-agent för dina räkning och ladda identiteter efter behov. Det lägger till nycklar bara en gång när det behövs, oavsett hur många terminaler, ssh eller inloggningssessioner som kräver åtkomst till en ssh-agent. Det kan också lägga till och använda en annan agent och olika uppsättningar nycklar beroende på värden som är ansluten till, eller katalogen ssh anropas från. Detta möjliggör isolering av nycklar när man vidarebefordrar agent med olika värdar. Det gör det också möjligt att använda flera konton på webbplatser som GitHub.

För att aktivera ssh-ident, installera det och lägg till följande alias i ditt ~/bash_profile:

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

ssh-tangent med lösenfras, med keychain

keychain är ett litet verktyg som hanterar ssh-agent för dina räkning och låter ssh-agent fortsätta att gå när inloggningssessionen avslutas. Vid efterföljande inloggningar kommer keychain att ansluta till den befintliga ssh-agent -instansen. I praktiken betyder detta att lösenfrasen endast måste anges under den första inloggningen efter en omstart. Vid efterföljande inloggningar används den okrypterade nyckeln från den befintliga ssh-agent -instansen.Detta kan också vara användbart för att tillåta lösenordsfri RSA / DSA-autentisering i cron jobb utan lösenordslösa ssh-nycklar.

För att aktivera keychain, installera det och lägg till något som följande till ~/.bash_profile:

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

Från en säkerhetspunkt på visa, ssh-ident och keychain är värre än ssh-agent instanser begränsade till en viss livslängd session, men de erbjuder hög bekvämlighet. För att förbättra säkerheten för keychain lägger vissa till alternativet --clear i deras ~/.bash_profile nyckelring åkallan. Genom att göra detta måste lösenfraser matas in vid inloggning enligt ovan, men cron jobb kommer fortfarande att ha tillgång till de okrypterade nycklarna efter att användaren loggar ut. keychain wiki-sidan har mer information och exempel.

ssh-key utan lösenfras

Ur säkerhetssynpunkt är detta det värsta alternativet eftersom den privata nyckeln är helt oskyddad om den är utsatt. Detta är dock det enda sättet att se till att lösenfrasen inte behöver matas in igen efter en omstart.

ssh-nyckel med lösenfras, med ssh-agent, skickar lösenfras till ssh-add från skript

Även om det kan verkar som en rak idé att skicka lösenfrasen till ssh-add från ett skript, t.ex. echo "passphrase\n" | ssh-add, det här är inte så enkelt som det verkar som att ssh-add inte läser lösenfras från stdin, men öppnar /dev/tty direkt för läsning .

Detta kan vara arbetade runt med expect , ett verktyg för automatisering av interaktiv applikationer. Nedan följer ett exempel på ett skript som lägger till en ssh-nyckel med en lösenfras som är lagrad i skriptet:

#!/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 

Observera att eftersom lösenfrasen lagras i klartext i från ett säkerhetsperspektiv är skriptet knappast bättre än att ha en lösenordsfri ssh-nyckel. Om detta tillvägagångssätt ska användas är det viktigt att se till att skriptet expect som innehåller lösenfrasen har rätt behörigheter, vilket gör det läsbart, skrivbart och körbart endast med nyckeln ägare.

Kommentarer

  • Okej, men när jag lägger din kod till ~ / .bash_profile måste jag skriva in lösenord varje gång jag loggar in, jag vill inte ’ det heller. Jag är inte alls bekymrad över säkerheten. eko ” passera \ n ” | ssh-add fungerar inte ’ t
  • @ user1607072 Ja, det är så ssh-agent utdrag i ~/.bash_profile beter sig som förklaras i svaret. Du kanske vill titta på verktyget keychain. Med keychain måste du ange lösenordet vid första inloggningen efter omstart, men vid efterföljande inloggningar kommer keychain att ansluta till en befintlig ssh-agent instans med den dekrypterade nyckeln i minnet. Bortsett från det finns ’ möjligheten att generera en ssh-nyckel utan lösenfras, men det rekommenderas naturligtvis inte.
  • @ user1607072 Medan jag skulle föreslå en av de säkrare metoderna, det finns ett sätt att skicka lösenfrasen till ssh-add från ett skript. Anledningen till att echo "pass\n" | ssh-add inte fungerar är att ssh-add inte läser lösenordet från stdin, men öppnar /dev/tty direkt för läsning. Uppdaterade svaret för att inkludera en lösning för detta med hjälp av ett verktyg som heter expect.
  • @ user1607072 Det kan vara lite överdrivet för ditt användningsfall, men Kerberos i kombination med ssh GSSAPI -stöd kan också användas för lösenordsfria ssh-inloggningar. Motsvarande autentiseringsmetod i ssh kallas gssapi-with-mic. Detta används vanligtvis i större nätverk, men naturligtvis om du har intresse för detta kan det vara värt att titta på det.
  • @ErickBrown: Har redan svarat här . SSH Agent-enheten ska stoppas vid utloggning om du har inaktiverat användarnivå i systemd login manager . Om användardröjande är aktiverat fortsätter systemd-användarinstansen och SSH Agent-enheten att fungera även efter att den senaste inloggningssessionen har stängts.

Svar

Lägg till detta i din ~/.bashrc och logga sedan ut och åter in för att träda i kraft.

 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  

Detta bör bara be om ett lösenord första gången du loggar in efter varje omstart. Det kommer att fortsätta att återanvända samma ssh-agent så länge det fortsätter att fungera.

Kommentarer

  • mycket snyggt , så har du bara en ssh-agent igång (: Flera agenter som i @thomasNyman ’ s andra lösning verkar vara en säkerhetsrisk för mig …
  • Efter att ha forskat på olika webbplatser och läst olika lösningar verkar den här vara den tydligaste, rakt på sak. Mycket trevligt. +1
  • bättre att göra detta: `alias ssh = ssh-check-agent ”, och låt kontrollagentversionen göra ovanstående. på det sättet: a) du får bara en agent och b) du får bara agenten om du behöver det
  • Jag tror -s är standard, så vi ’ gör det redan.
  • Observera att ssh-add utan argument lägger till ~/.ssh/id_rsa. Du kanske vill skicka ssh-add argument om dina privata nycklar finns i en annan fil.

Svara

Inte nära besläktad med OP: s fråga, men det kan vara användbart för andra: eftersom 7.2.0 ssh (1) har ett alternativ som gör det möjligt att lägga till en nyckel till ssh-agent vid första autentiseringen; alternativet är AddKeysToAgent och kan ställas in på yes, no, ask eller confirm, systemomfattande eller i din personliga .ssh/config -fil.

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

Kommentarer

  • Gäller för dem som är nya i .ssh/config -filen: detta gäller ssh och allt som använder ssh bakom det, till exempel scp, och kan göras på värdbasis.
  • Det ber mig fortfarande om lösenord varje gång jag loggar in och försöker att git pull till exempel.
  • @trainosis Problemet är att du förmodligen inte har en ssh-agentinstans som kör för att hålla de dekrypterade nycklarna i minnet för framtida bruk. Du behöver bara ange lösenordet för en viss nyckel en gång per inloggningssession när du använder ssh-agent.

Svar

ssh-agent cachar olika olåsta ssh-nycklar, så att du kan ha ssh-nycklar skyddade med lösenord, men utan att behöva skriva dem varje gång.

För att cache-låsa upp olåsta nycklar måste det självklart låsa upp dessa nycklar. För att låsa upp nycklar som är låsta med en lösenfras måste den uppenbarligen känna till dessa lösenfraser.

Alla metoder som inte kräver auktorisation från en människa (t.ex. ”skriva in ett lösenord”) gör inte bara din osäkra system; det kommer också att göra hela syftet med ssh-agenten meningslöst.

Med detta sagt kan du helt enkelt använda ssh-nycklar som inte är lösenordsskyddade (tryck Enter när du blir ombedd för ett lösenord under nyckelgenerering). Eftersom det inte finns något lösenord behöver ssh-agent inte be dig om ett för att (inte) cacha det.

Kommentarer

  • Jag håller med, så länge dina nycklar är korrekt användarbehöriga, är det liten fördel med ssh-agent jämfört med behörighetslösa nycklar. Jag gillar att ssh till en inloggningsserver och sedan har den servern en massa permssionless nycklar, som alla kan användas för att låsa upp en annan server. inloggningsservern gör ingenting annat, så det ’ är mycket svårare att hacka / spoofa osv … de andra servrarna har ingen åtkomst till lösenord, är bara nycklar.

Svar

Här är en lösning för att automatisera din SSH-lösenfras.

  1. Skapa ett one-liner-skript som skriver ut din lösenfras till standardutdata, t.ex.:

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

    Viktigt: Se till du kopierar det ledande utrymmet till förhindrar att ditt lösenord lagras i din historik .

Och använd någon av metoderna nedan.

  • med en standardinmatningsmetod:

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add - 
  • eller namngivna rör tillvägagångssätt:

    1. Skapa en namngivet rör (du kan också prova en processersättning ):

      mkfifo --mode 0600 ~/.ssh_fifo 
    2. Kör ssh-add genom att ange det program som används för autentisering:

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

    Se: man ssh-add för att läsa mer om SSH_ASKPASS.

Kommentarer

  • echo my_passphrase är ett stort säkerhetshål. Först efter att du har skrivit det finns lösenordet i klartext i historikfilen för vad som helst skal du använder. Och andra kommandoradsargument är världsläsbara på Unix (ps -ef). Lägg aldrig lösenord i kommandoradsargument!
  • @ceving Att lägga till extra ledande utrymme löser problemet med historikfilen. Lagt till extra info.
  • @kenorb: Det löser inte ’ det större problemet med lösenordet som syns i ps produktion. Historikfilen är vanligtvis bara läsbar av den ägande användaren ändå, men kommandoraderna är läsbara för alla användare i ett system.

Svar

Jag rekommenderar inte att du ssh-add (som behöver öppna en ssh-agent) vid inloggning. Detta beror på att du inte kan kontrollera när ssh-agent-avsnittet slutar och kan skapa säkerhetsrisk när du inte behöver använda nyckelfilerna vid ett inloggningsavsnitt.

Snarare rekommenderar jag att du skriver ett manus som öppnar ett underskal för ssh-agent, med alla nyckelfiler som läggs till automatiskt, och kallas när behövs för att använda ssh. Om du kunde anta det, läs vidare.

Du skulle ha två val:

  1. Ta bort alla lösenfraser för dina nycklar, som har svag säkerhet om dina nyckelfiler är stulna. (alltså rekommenderas inte )

  2. Använd samma lösenfras för dina nycklar. När du sedan ssh-add keyfile1 keyfile2 ... behöver du bara skriva lösenfrasen en gång per sektion.

I båda fallen kan du skriva en sådan skriptfil ”ssh_keys_section.sh” som nedan:

#!/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" 

Anmärkningar:

  • Kommando för att ändra eller ta bort lösenfras: ssh-keygen -p -f keyfile
  • Inom underskalet kan du till och med dela upp fler terminaler som delar samma olåsta nycklar genom att kanske använda ett kommando som /path/to/yourterminal & (beror på operativsystem)

Kommentarer

  • t.ex. På Windows i Cygwin, /path/to/yourterminal & == > mintty &
  • Anmärkning: stäng sessionen efter användning med ctrl-d eller exit, precis som om du har åberopat en kapslad bash skal och måste stänga det.

Svar

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 

Svar

Jag brukade använda skriptet som nämns av steampowered, jag har gjort nedanstående nu, eftersom det inte lämnar filer ligger runt.

Arbetar på zsh endast skal.

#!/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 

Kommentarer

  • ” Arbetar med endast zsh-skal ”, okej men varför anger din shebang-linje att endast kräva ” sh ”?

Svara

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 

Ger kredit här: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

Denna lösning stöds också här: http://mah.everybody.org/docs/ssh

Svar

Om du kör sjöhäst som din lösenordshanterare … Vilket du förmodligen är; D

En annan lösning som uppnår det mål du söker är att helt enkelt lägga till ssh-tangenterna till sjöhäst för automatisk upplåsning vid inloggning . Den största fördelen med detta är att du aldrig behöver ange ett lösenord för nycklarna efter att du loggat in via gdm, eller vad du än loggar in med, även om nycklarna har ett lösenord. Detta KRÄVER både den privata och den offentliga nyckeln. De MÅSTE också följa en namngivningskonvention för sjöhäst. Standardvärdet är acceptabelt (id_rsa för privat nyckel och id_rsa.pub för offentlig nyckel … Egentligen allt som är privatnamnnamn och privatekeynamn.pub )

För att lägga till din ssh-nyckel till sjöhäst för automatisk upplåsning vid inloggning; (på fedora25 är jag inte säker på var sökvägen är på andra distroer men det är troligtvis mycket lika)

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

För mig var det

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

(sjöhäst antar automatiskt att den offentliga nyckeln i mitt fall var id_rsa.pub)

Efter att ha utfört kommandot öppnar sjöhäst en söta lilla gtk-lösenordsfältet för att ange lösenordet för den privata nyckeln. eller bara lämna det tomt om du skapade nyckeln utan lösenord. Du måste försöka ssh in i målmaskinen.Då kommer sjöhäst att uppmana dig att låsa upp nyckeln med ett lösenord grafiskt (DETTA HÄNDER ENDAST) igen men det borde se lite annorlunda ut denna gång; P (det här är också den del där sjöhäst gör lite sjöhäst för att ssh-add magi tror jag ) och erbjuda OPTION för att låsa upp nyckeln vid inloggning, du måste markera det här alternativet för att uppnå ditt mål.

Bara för att jag inte läste alla svaren skulle jag rekommendera att ångra vad alla sa till dig att göra med ssh-add innan jag försökte svara. Om du gör det annars kan det leda till att något dåligt händer till dina nycklar, idk.

Svar

Enkel inloggningslösning för SSH kan leda mig till pam_ssh .

Enligt denna artikel , konceptet är:

Om du arbetar med flera * nix-baserade maskiner via ssh är du förmodligen trött på nackdelar måste du alltid ange ditt lösenord varje gång du vill komma åt en annan ruta. Det finns ett säkert sätt att låta dig komma åt varje maskin som du har ssh-åtkomst till utan att behöva ange ett annat lösenord (annat än det du ursprungligen loggade på.)


Det här är faktiskt ganska enkelt att göra, du skapar i princip bara ett offentligt / privat nyckelpar för att autentisera dig själv för dina andra maskiner och har sedan PAM skapar en agent för att ladda dina nycklar när du loggar in, vilket ger en enda inloggningslösning för åtkomst till alla dina fjärrmaskiner. Den här guiden guidar dig genom att ställa in detta.

Jag har inte verifierat att detta faktiskt skulle fungera.

Svar

Lägg till detta i din ~/.bashrc -fil:

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

Kommentarer

  • Jag förstår inte ’ hur detta relaterar till frågan, som handlar om att inte bli ombedd att lösenordet vid efterföljande inloggningar.

Svar

För att lägga till en (eventuellt lösenordslös) nyckel och se till att ssh-add kommer inte att be om ett lösenord, oavsett vad, inte ens när du kör under X :

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

Utgångsstatus indikerar framgång eller misslyckande.

Svar

Här är den definitiva manus.

Uppdatera $ PASSW och kopiera och klistra sedan in den i din terminal

# <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 

Svar

Det bästa sättet jag känner till är att använda ett PAM-inloggningsskript som jag anpassade från tidigare arbete eftersom jag inte kunde hitta ett tillfredsställande svar i den här frågan.

Din lösenfras får lagras krypterat med ditt systemlösenord och en tung härledningsfunktion. Vid inloggning används ditt systemlösenord för att dekryptera lösenfrasen och lägga till den till agenten.

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

Fördelen jämfört med alla andra lösningar som presenteras är att den kombinerar säkerhet motsvarande att köra ssh-add manuellt vid start utan nollansträngning. inga extra verktyg och har ett extra beroende som redan är installerat som standard på de flesta system (OpenSSL).

Svar

Mitt installationen på macOS är som följer (i .zshrc eller .bash_profile för bash-folk):

|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] -delen är nödvändig på macOS eftersom standardvärdet är /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners. Annars misslyckas @Thomas Nymans omfattande svar eftersom $SSH_AUTH_SOCK alltid är inställt på något.

Sedan i .zlogout (eller .bash_logout för bash-folk):

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

Testat på macOS Mojave 10.14.5

Svar

Detta har förklarats mycket bra av GitHub på Auto-startar ssh-agent på Git för Windows , vilket i sin tur fungerar även för Linux.

Du kan köra ssh-agent automatiskt när du öppnar bash eller Git shell. Kopiera följande rader och klistra in dem i din ~/.profile eller ~/.bashrc -fil i Git-skal:

 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  

Om din privata nyckel inte är lagrad på en av standardplatserna (som ~/.ssh/id_rsa) måste du tala om för din SSH-autentiseringsagent var du hittar den. Om du vill lägga till din nyckel till ssh-agent skriver du ssh-add ~/path/to/my_key.

Tips: Om du vill att ssh-agent ska glömma din nyckel efter en tid kan du konfigurera den för att göra det genom att köra ssh-add -t <seconds>.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *