Haluan kommunikoida useiden verkkoni tietokoneiden (staattinen Ethernet) välillä SSH: n kautta. Jotta voin tehdä sen, minun on suoritettava ssh-add joka kerta, kun kirjaudun sisään tietylle koneelle, miten voin tehdä sen niin, että se asetetaan kerran eikä se kysy minulta salasanaa joka kerta kun kirjaudun sisään tai käynnistääkö koneeni uudelleen?
Tiedän, että on tapa, jolla sinun pitäisi lisätä joitain rivejä tiedostoon bash_profile
, mutta minun on silti kirjoitettava salasana joka kun käynnistän uudestaan / kirjaudun tiettyyn koneeseen.
if [ -z "$SSH_AUTH_SOCK" ] ; then eval `ssh-agent -s` ssh-add fi
Kommentit
- samanlaisia kuin tämä kysymys stackoverflow.com/questions/18880024/start-ssh-agent-on-login
- stackoverflow.com/a/52671286/217408 ratkaisi sen, että välitin salasanan bitwardenilta
- @steampowered yes – mutta mielestäni tässä annettu ylin vastaus on parempi ja Unix SE on sopivampi paikka tälle kysymykselle
vastaus
Tämä on tyypillinen esimerkki suojauksen välisestä kompromissista ja mukavuutta. Onneksi on olemassa useita vaihtoehtoja. Sopivin ratkaisu riippuu käyttötilanteesta ja halutusta suojaustasosta.
ssh-avain salasanalla, ei ssh-agent
Salasana on syötettävä joka kerta, kun avainta käytetään todennukseen. Vaikka tämä on paras vaihtoehto turvallisuuden kannalta, se tarjoaa huonon käytettävyyden. Tämä voi myös johtaa siihen, että heikko tunnuslause valitaan järjestyksessä vähentämään taakan syöttämistä uudelleen.
ssh-avain salasanalla, ssh-agent
Seuraavan lisääminen kohtaan ~/.bash_profile
alkaa automaattisesti ssh-agent
ja lataa ssh-avain (t) sisäänkirjautumisen yhteydessä:
if [ -z "$SSH_AUTH_SOCK" ] ; then eval `ssh-agent -s` ssh-add fi
Salasana on syötettävä jokaiseen Kirjaudu sisään. Vaikka se on hieman parempi käytettävyyden kannalta, sillä on haittapuoli, että ssh-agent
pyytää salasanaa riippumatta siitä, käytetäänkö avainta sisäänkirjautumisistunnon aikana vai ei. Jokainen uusi sisäänkirjautuminen synnyttää myös erillisen ssh-agent
-esiintymän, joka pysyy käynnissä lisättyjen avainten kanssa muistissa myös uloskirjautumisen jälkeen, ellei sitä nimenomaisesti tapeta.
Tappaa ssh_agent
uloskirjautumisen yhteydessä, lisää seuraava kohtaan ~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi
tai seuraavaan ~/.bash_profile
trap "test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`" 0
Useiden ssh-agent
-esiintymien luominen voidaan välttää pysyvän tietoliikennepisteen luominen agentille kiinteään sijaintiin tiedostojärjestelmässä, kuten Collin Andersonin vastauksessa . Tämä on parannus kutuessa useita agentteja ilmentymät, ellei nimenomaisesti tapettu, purettu avain jää kuitenkin muistiin uloskirjautumisen jälkeen.
Pöytäkoneilla työpöytäympäristöön kuuluvat ssh-agentit, kuten Gnome avaimenperä SSH-agentti , voi olla parempi lähestymistapa, koska ne voidaan yleensä pyytää pyytämään passia lause ensimmäisen kerran, kun ssh-avainta käytetään kirjautumisistunnon aikana, ja säilytä salattu salattu avain muistissa istunnon loppuun asti.
ssh- avain salasanalla, ssh-ident
ssh-ident
on apuohjelma, joka voi hallita ssh-agent
-palvelua puolestasi ja ladata tunnuksia tarvittaessa. Se lisää avaimet vain kerran tarpeen mukaan riippumatta siitä, kuinka monta päätelaitetta, ssh- tai kirjautumisistuntoa tarvitsee pääsyn ssh-agent
-palveluun. Se voi myös lisätä ja käyttää eri agenttia ja erilaisia avainjoukkoja riippuen isännästä, johon yhteys on muodostettu, tai hakemistoon ssh kutsutaan. Tämä mahdollistaa avainten eristämisen käytettäessä agentin edelleenlähetystä eri isäntien kanssa. Se sallii myös useiden tilien käytön GitHubin kaltaisissa sivustoissa.
Jos haluat ottaa käyttöön ssh-ident
, asenna se ja lisää seuraava alias :
alias ssh="/path/to/ssh-ident"
ssh-avain salasanalla, keychain
keychain
on pieni apuohjelma, joka hallitsee ssh-agent
puolestasi ja sallii ssh-agent
pysyä käynnissä, kun kirjautumisistunto päättyy. Seuraavilla kirjautumiskerroilla keychain
muodostaa yhteyden olemassa olevaan ssh-agent
-esiintymään. Käytännössä tämä tarkoittaa, että salasana on syötettävä vasta ensimmäisen käynnistyksen jälkeen. Seuraavissa kirjautumisissa käytetään nykyisen ssh-agent
-esiintymän salaamatonta avainta.Tästä voi olla hyötyä myös silloin, kun sallitaan salasanaton RSA / DSA-todennus cron
-työissä ilman salasanattomia ssh-avaimia.
keychain
, asenna se ja lisää jotain seuraavista ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
näkymä, ssh-ident
ja keychain
ovat huonompia kuin ssh-agent
-tapaukset, jotka on rajoitettu tietyn eliniän istunto, mutta ne tarjoavat korkean mukavuuden tason. Parantaakseen keychain
-tietoturvan turvallisuutta, jotkut ihmiset lisäävät --clear
-vaihtoehdon ~/.bash_profile
-avaimenperään. kutsuminen. Näin tekemällä salasanat on kirjoitettava sisäänkirjautumisen yhteydessä uudelleen, kuten yllä, mutta cron
-työillä on silti pääsy salaamattomiin avaimiin käyttäjän kirjautumisen jälkeen. keychain
wiki -sivulla on lisätietoja ja esimerkkejä.
ssh-avain ilman salasanaa
Suojauksen kannalta tämä on huonoin vaihtoehto, koska yksityinen avain on täysin suojattu siinä tapauksessa, että se altistuu. Tämä on kuitenkin ainoa tapa varmistaa, että salasanaa ei tarvitse kirjoittaa uudelleen uudelleenkäynnistyksen jälkeen.
ssh-avain salasanalla, ssh-agent
, välittää salasanan ssh-add
komentosarjasta
Vaikka se saattaakin tuntuu suoraviivaiselta ajatukselta välittää salasana ssh-add
komentosarjalta, esim. echo "passphrase\n" | ssh-add
, tämä ei ole niin suoraviivaista kuin miltä näyttää siltä kuin ssh-add
ei lue salasana osoitteesta stdin
, mutta avaa /dev/tty
suoraan lukemista varten .
Tämä voi olla kierteli expect
-työkalun kanssa, joka on vuorovaikutteisen toiminnan automatisointityökalu sovellukset. Alla on esimerkki komentosarjasta, joka lisää ssh-avaimen komentosarjaan tallennetulla salasanalla:
#!/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
Huomaa, että koska salasana on tallennettu selkokieliseksi komentosarja, turvallisuuden näkökulmasta, on tuskin parempi kuin salasanattoman ssh-avaimen käyttäminen. Jos tätä lähestymistapaa halutaan käyttää, on tärkeää varmistaa, että salasanan sisältävällä komentosarjalla expect
on asetettu asianmukaiset oikeudet, joten se on luettavissa, kirjoitettavissa ja ajettavissa vain avaimella omistaja.
Kommentit
- Okei, mutta kun laitan koodisi ~ / .bash_profile-tiedostoon, minun on kirjoitettava salasana aina, kun kirjaudun sisään, älä myöskään halua sitä ’. En ole ollenkaan huolissani turvallisuudesta. echo ” pass \ n ” | ssh-add ei toimi ’ t toimi
- @ user1607072 Joo, näin
ssh-agent
-katkelma~/.bash_profile
käyttäytyy vastauksessa selitetyllä tavalla. Haluat ehkä tarkastellakeychain
-apuohjelmaa.keychain
-kohdassa sinun on annettava salasana ensimmäisellä sisäänkirjautumisella uudelleenkäynnistyksen jälkeen, mutta seuraavilla sisäänkirjautumisillakeychain
muodostetaan yhteys olemassa olevaanssh-agent
-esiintymä, jonka salattu avain on muistissa. Sen lisäksi ’ s on mahdollisuus luoda ssh-avain ilman salasanaa, mutta tätä ei tietenkään suositella. - @ user1607072 Vaikka haluaisin vahvasti ehdottaa yhtä turvallisemmista lähestymistavoista, on tapa välittää salasana komentosarjan
ssh-add
välityksellä. Syyecho "pass\n" | ssh-add
ei toimi, ettässh-add
ei lue salasanaa osoitteestastdin
, mutta avaa/dev/tty
suoraan lukemista varten. Päivitimme vastauksen sisällyttämään tähän kiertotavan käyttämällä apuohjelmaa nimeltäexpect
. - @ user1607072 Se voi olla hieman ylitapa käyttötapauksessasi, mutta Kerberos yhdistettynä ssh GSSAPI -tukeen voidaan käyttää myös salasanattomille ssh-kirjautumisille. Vastaavaa todennustapaa ssh: ssä kutsutaan nimellä
gssapi-with-mic
. Tätä käytetään yleensä suuremmissa verkoissa, mutta tietysti kannattaa tutkia, jos olet kiinnostunut siitä. - @ErickBrown: Vastasi jo tänne . SSH Agent -yksikkö on pysäytettävä uloskirjautumisen yhteydessä, jos käyttäjän viivästyminen on poistettu käytöstä systemd -kirjautumishallinnassa . Jos käyttäjän viivästyminen on käytössä, systemd-käyttäjäesimerkki ja SSH Agent -yksikkö jatkavat toimintaansa myös sen jälkeen, kun viimeinen kirjautumisistunto on suljettu.
Vastaa
Lisää tämä ~/.bashrc
-kansioon ja kirjaudu sitten ulos ja takaisin sisään voimaantulemiseksi.
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
Tämän pitäisi pyytää vain salasanaa kun kirjaudut sisään ensimmäisen kerran jokaisen uudelleenkäynnistyksen jälkeen. Se käyttää samaa ssh-agent
uudelleen niin kauan kuin se toimii.
Kommentit
- erittäin siisti , tällä tavalla sinulla on vain yksi ssh-agentti käynnissä (: Useita agentteja kuten @thomasNyman ’ -sovelluksessa näyttää olevan turvallisuusriski …
- Kun olet tutkinut eri sivustoja ja lukenut erilaisia ratkaisuja, tämä näyttää olevan selkein, suoraan asiaan. Erittäin mukava. +1
- parempi tehdä tämä: `alias ssh = ssh-check-agent ”, ja pyydä check-agent-versiota tekemään yllä olevat toimet tällä tavalla: a) saat vain yhden agentin ja b) saat agentin vain, jos tarvitset sitä
- Mielestäni -s on oletusarvo, joten me ’ teemme sen jo.
- Huomaa, että
ssh-add
ilman argumentteja lisää~/.ssh/id_rsa
. Haluat ehkä välittäässh-add
-argumentit, jos yksityiset avaimesi ovat toisessa tiedostossa.
Vastaa
Ei liity läheisesti OP: n kysymykseen, mutta se voi olla hyödyllinen muille: koska 7.2.0 ssh (1): ssä on vaihtoehto, joka sallii avaimen lisäämisen ssh-agenttiin ensimmäisen todennuksen yhteydessä; vaihtoehto on AddKeysToAgent
ja se voidaan asettaa arvoon yes
, no
, ask
tai confirm
, koko järjestelmässä tai henkilökohtaisessa .ssh/config
-tiedostossasi.
Viite : https://www.openssh.com/txt/release-7.2
Kommentit
- Koskee niitä, jotka ovat uusia
.ssh/config
-tiedostossa: tämä koskeessh
ja kaikkea muuta, mikä käyttäässh
sen takana, esimerkiksiscp
, ja se voidaan tehdä isäntäkohtaisesti. - Se pyytää silti minulta salasanaa joka kerta, kun kirjaudun sisään ja yritän hankkia esimerkiksi vedon.
- @trainosis Ongelma on, että sinulla ei todennäköisesti ole käynnissä olevaa ssh-agentti-ilmentymää pitämään salaamattomia avaimia muistissa tulevaa käyttöä varten. Sinun on annettava tietyn avaimen salasana vain kerran kirjautumisistunnossa, kun käytät ssh-agenttia.
Vastaa
ssh-agent
tallentaa välimuistiin useita avaamattomia ssh-avaimia, joten voit suojata ssh-avaimet salasanoilla, mutta sinun ei tarvitse kirjoittaa niitä joka kerta.
Avattujen avainten välimuistiin tallentamisen on tietenkin avattava nämä avaimet. Salasanalla lukittujen avainten lukituksen avaamiseksi sen on tietysti tunnettava nämä salasanat.
Kaikki menetelmät, jotka eivät vaadi ihmisen lupaa (esim. ”Salasanan kirjoittaminen”), eivät vain tee järjestelmän epävarmuus; se tekee myös ssh-agentin koko tarkoituksen merkityksettömäksi.
Tämän kaiken sanottuasi voit yksinkertaisesti käyttää ssh-avaimia, joita ei ole suojattu salasanalla (paina Enter pyydettäessä salasanan avaimen luomisen aikana). Koska salasanaa ei ole, ssh-agent
ei tarvitse pyytää sinulta sellaista, jotta sitä ei voi tallentaa välimuistiin.
Kommentit
- Olen samaa mieltä, niin kauan kuin avaimesi ovat oikein vain käyttäjän sallittuja, ssh-agentilla on vain vähän etua käyttöoikeuksien avaimiin nähden. haluan ssh sisään kirjautumispalvelimeksi, ja sitten, että palvelimella on joukko pysymättömiä avaimia, joita kaikkia voidaan käyttää vain yhden toisen palvelimen lukituksen avaamiseen. kirjautumispalvelin ei tee mitään muuta, joten sitä ’ on paljon vaikeampi hakkeroida / huijata jne. … muilla palvelimilla ei ole salasanan käyttöoikeutta, ne ovat vain avaimia.
Vastaus
Tässä on kiertotapa SSH-salasanasi automatisointiin.
-
Luo yksirivinen komentosarja, joka tulostaa salasanasi vakiotulosteeseen, esimerkiksi:
echo "echo MY_SSH_PASSWORD" > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password
Tärkeää: Varmista kopioit alkutilan estät salasanasi tallentamisen historiaasi .
Ja käytä yhtä alla olevista tavoista.
-
käyttämällä tavallista syöttötapaa:
cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add -
-
tai nimetty putki -lähestymistapa:
-
Luo nimetty putki (voit myös kokeilla prosessin korvaamista ):
mkfifo --mode 0600 ~/.ssh_fifo
-
Suorita
ssh-add
määrittämällä todentamiseen käytetty ohjelma:cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo
Katso:
man ssh-add
lukeaksesi lisää aiheestaSSH_ASKPASS
. -
kommentit
-
echo my_passphrase
on suuri tietoturva-aukko. Ensin sen jälkeen, kun olet kirjoittanut sen, salasana on selkeässä tekstissä käyttämäsi kuoren historiatiedostossa. Ja toisen komentorivin argumentit ovat maailman luettavissa Unixissa (ps -ef
). Älä koskaan laita salasanoja komentoriviargumentteihin! - @ceving Ylimääräisen etätilan lisääminen ratkaisee historiatiedoston ongelman. Lisätty lisätietoa.
- @kenorb: Se ei ’ ei ratkaise suurempaa salasanan ongelmaa, joka näkyy kohdassa
ps
ulostulo. Historiatiedosto on tavallisesti vain omistavan käyttäjän luettavissa, mutta komentorivit ovat kaikkien järjestelmän käyttäjien luettavissa.
Vastaa
En suosittele sinulle ssh-addia (jonka on avattava ssh-agentti) kirjautumisen yhteydessä. Tämä johtuu siitä, että et voi hallita, kun ssh-agent-osio päättyy, ja voit luoda tietoturvariskin kun avaintiedostoja ei tarvitse käyttää yhdessä sisäänkirjautumisosiossa.
Sen sijaan suosittelen pikemminkin kirjoittamaan komentosarjan, joka avaa ssh-agentin osan alikuoren, johon kaikki avaintiedostot on lisätty automaattisesti, ja kutsumaan, kun tarvitaan käyttämään ssh. Jos pystyt käyttämään niin, lue eteenpäin.
Sinulla on kaksi vaihtoehtoa:
-
Poista kaikki avainten salasanat, joissa on heikko suojaus jos avaintiedostosi varastetaan. (Siksi ei suositella )
-
Käytä samaa salasanaa avaimissasi. Kun sitten
ssh-add keyfile1 keyfile2 ...
, sinun on kirjoitettava salasana vain kerran kutakin osiota kohti.
Molemmissa tapauksissa voit kirjoittaa seuraavan komentotiedoston ”ssh_keys_section.sh” seuraavasti:
#!/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"
Huomautuksia:
- Komento salasanan muuttamiseksi tai poistamiseksi:
ssh-keygen -p -f keyfile
- Alikuoressa voi jopa haarautua useampaan päätelaitteeseen, jotka jakavat saman lukitsematta avaimet käyttämällä komentoa, esimerkiksi
/path/to/yourterminal &
(käyttöjärjestelmästä riippuen)
Kommentit
- Esim Cygwinin Windows-käyttöjärjestelmässä
/path/to/yourterminal &
== >mintty &
- Huomautus: sulje käytön jälkeen istunto
ctrl-d
taiexit
, aivan kuten olet kutsunut sisäkkäisenbash
kuori ja täytyy sulkea se.
Vastaa
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
Vastaa
Käytin aiemmin steampoweredin mainitsemaa komentosarjaa, olen tehnyt alla olevan nyt, koska se ei jätä tiedostoja makaa.
Työskentely vain zsh
-kuoren kanssa.
#!/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
Kommentit
- ” Työskentely vain zsh-kuori ”, okei, mutta miksi shebang-linjasi vaatii vain ” sh ”?
Vastaa
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
Luottotiedot: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html
Tätä ratkaisua kannatetaan myös täällä: http://mah.everybody.org/docs/ssh
Vastaa
Jos salasanaasi käytetään merihevosia … Mikä olet todennäköisesti; D
Toinen ratkaisu, jolla saavutat etsimäsi tavoitteen, on yksinkertaisesti lisätä ssh-avaimet merihevoseen automaattisen lukituksen avaamiseksi sisäänkirjautumisen yhteydessä . Suurin etu on, että sinun ei koskaan tarvitse antaa salasanaa avaimille, kun olet kirjautunut sisään gdm: n kautta tai millä tahansa kirjautumisella, vaikka avaimilla olisi salasana. Tämä vaatii sekä yksityisen että julkisen avaimen. Heidän on myös noudatettava merihevosen nimeämiskäytäntöä. Oletusarvo on hyväksyttävä (yksityisen avaimen id_rsa ja julkisen avaimen id_rsa.pub … Oikeasti kaikki, mikä on yksityisnimi ja yksityisen avaimen nimi.pub )
Voit lisätä ssh-avaimen merihevoselle automaattisen lukituksen avaamiseksi sisäänkirjautumisen yhteydessä. (fedora25: ssä en ole varma, missä polku on muilla distroilla, vaikka sen todennäköisyys on hyvin samanlainen)
/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here
Minulle se oli
/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa
(merihevonen olettaa automaattisesti, että tapaukseni julkinen avain oli id_rsa.pub)
Komennon suorittamisen jälkeen merihevonen avaa söpö pieni gtk-salasanakenttä, johon voit kirjoittaa yksityisen avaimen salasanan. tai jätä se vain tyhjäksi, jos olet luonut avaimen ilman salasanaa.
Seahorse ei kysy, jos kaikki meni hyvin. Sinun on yritettävä ssh kohdekoneeseen.Sitten merihevonen kehottaa sinua avaamaan avaimen salasanalla graafisesti (TÄMÄ AINOASTA TAPAHTUU), mutta sen pitäisi näyttää hieman erilaiselta tällä kertaa; P (tämä on myös osa, jossa merihevonen tekee jonkin verran merihevosta ssh-add-taikuuden uskon ) ja tarjoa OPTION avaamaan avaimen sisäänkirjautumisen yhteydessä, sinun on valittava tämä vaihtoehto saavuta tavoitteesi.
Vain siksi, etten lukenut kaikkia vastauksia, suosittelisin, että kumotit sen, mitä kaikki ovat sanoneet sinun tekevän ssh-addin kanssa, ennen kuin yrität tätä vastausta. Muuten tekeminen saattaa johtaa jotain pahaa avaimiin, idk.
Vastaa
SSH: n kertakirjautumisratkaisu voi johtaa minut kohtaan pam_ssh
.
tämän artikkelin mukaan , konsepti on:
Jos työskentelet useiden * nix-pohjaisten koneiden kanssa ssh: n kautta, olet todennäköisesti kyllästynyt haitoihin salasana on syötettävä joka kerta, kun haluat käyttää toista laatikkoa. On turvallinen tapa antaa sinun käyttää kaikkia koneita, joihin sinulla on ssh-käyttöoikeus, ilman, että sinun tarvitsee syöttää toista salasanaa (muuta kuin alun perin kirjautuneena).
Tämä on oikeastaan melko helppo tehdä, luot periaatteessa vain julkisen / yksityisen avainparin todentaaksesi itsesi muille koneillesi, sitten PAM kutsuu agentin lataamaan avaimesi sisäänkirjautumisen jälkeen tarjoten yhden kirjautumisratkaisun kaikkien etäkoneidesi käyttämiseen. Tämä opas opastaa sinut tämän määrittämisessä.
En ole vahvistanut, että tämä todella toimii.
Vastaa
Lisää tämä ~/.bashrc
-tiedostoon:
ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key
Kommentit
- En näe ’ en näe, miten tämä liittyy kysymykseen, joka koskee salasanan pyytämättä jättämistä myöhemmillä kirjautumisilla.
Vastaa
Lisätäksesi (mahdollisesti salasanattomaan) avaimen ja varmista, että ssh-add
ei pyydä salasanaa riippumatta siitä, suoritetaanko X : ssä:
DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null
Poistumistila osoittaa onnistumisen tai epäonnistumisen.
Vastaa
Tässä on lopullinen käsikirjoitus.
Päivitä $ PASSW ja kopioi ja liitä se sitten päätelaitteeseesi
# <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
Vastaa
Paras tapa, josta olen tietoinen, on käyttää PAM-kirjautumiskomentosarjaa, jonka muokkain aiemmasta työstäni, koska en löytänyt tyydyttävää vastausta tähän kysymykseen.
Salasanasi saa tallennetaan salatulla järjestelmän salasanalla ja raskaalla johdannaisfunktiolla. Kirjautumisen yhteydessä järjestelmän salasanaa käytetään salauksen salauksen purkamiseen ja lisäämiseen agenttiin.
https://github.com/capocasa/systemd-user-pam-ssh
Etu verrattuna kaikkiin muihin esitettyihin ratkaisuihin on, että se yhdistää turvallisuuden, joka vastaa ssh-addin suorittamista manuaalisesti käynnistyksen yhteydessä ilman vaivaa. ei ylimääräisiä työkaluja ja sillä on yksi ylimääräinen riippuvuus, joka on oletuksena jo asennettu useimpiin järjestelmiin (OpenSSL).
Vastaa
Oma MacOS: n asetukset ovat seuraavat (kohdassa .zshrc
tai .bash_profile
bash-ihmisille):
|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]
-osa on välttämätön macOS-käyttöjärjestelmässä, koska oletusarvo on /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners
. Muuten @Thomas Nymanin kattava vastaus epäonnistuu, koska $SSH_AUTH_SOCK
on aina asetettu johonkin.
Sitten kohdassa .zlogout
(tai .bash_logout
bash-ihmisille):
if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi
Testattu macOS Mojave 10.14.5
vastaus
GitHub on selittänyt tämän hyvin ssh-agentin automaattisella käynnistämisellä Git for Windows -sovelluksessa , joka puolestaan toimii myös Linuxissa.
Voit suorittaa ssh-agent
automaattisesti, kun avaat bash- tai Git-kuoren. Kopioi seuraavat rivit ja liitä ne ~/.profile
– tai ~/.bashrc
-tiedostoon Git-kuoressa:
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
Jos yksityistä avainta ei ole tallennettu johonkin oletussijaintiin (kuten ~/.ssh/id_rsa
), sinun on kerrottava SSH-todennusagentillesi, mistä se löytyy. Lisää avain ssh-agenttiin kirjoittamalla ssh-add ~/path/to/my_key
.
Vinkki: Jos haluat ssh-agent
unohtaa avaimesi jonkin ajan kuluttua, voit määritä se tekemään niin suorittamalla ssh-add -t <seconds>
.