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
- liknande den här frågan stackoverflow.com/questions/18880024/start-ssh-agent-on-login
- stackoverflow.com/a/52671286/217408 löste det för mig att skicka lösenfrasen från bitwarden
- @steampowered ja – men jag tror att det bästa svaret som ges här är bättre och Unix SE är en mer lämplig plats för denna fråga
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å verktygetkeychain
. Medkeychain
måste du ange lösenordet vid första inloggningen efter omstart, men vid efterföljande inloggningar kommerkeychain
att ansluta till en befintligssh-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 attecho "pass\n" | ssh-add
inte fungerar är attssh-add
inte läser lösenordet frånstdin
, 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 heterexpect
. - @ 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 skickassh-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ällerssh
och allt som använderssh
bakom det, till exempelscp
, 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.
-
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:
-
Skapa en namngivet rör (du kan också prova en processersättning ):
mkfifo --mode 0600 ~/.ssh_fifo
-
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 omSSH_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:
-
Ta bort alla lösenfraser för dina nycklar, som har svag säkerhet om dina nyckelfiler är stulna. (alltså rekommenderas inte )
-
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
ellerexit
, precis som om du har åberopat en kapsladbash
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>
.