Kuinka voin suorittaa ssh-add-ohjelman automaattisesti ilman salasanakehotetta?

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

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ä tarkastella keychain -apuohjelmaa. keychain -kohdassa sinun on annettava salasana ensimmäisellä sisäänkirjautumisella uudelleenkäynnistyksen jälkeen, mutta seuraavilla sisäänkirjautumisilla keychain muodostetaan yhteys olemassa olevaan ssh-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ä. Syy echo "pass\n" | ssh-add ei toimi, että ssh-add ei lue salasanaa osoitteesta stdin, 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ä koskee ssh ja kaikkea muuta, mikä käyttää ssh sen takana, esimerkiksi scp, 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.

  1. 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:

    1. Luo nimetty putki (voit myös kokeilla prosessin korvaamista ):

      mkfifo --mode 0600 ~/.ssh_fifo 
    2. 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ää aiheesta SSH_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:

  1. Poista kaikki avainten salasanat, joissa on heikko suojaus jos avaintiedostosi varastetaan. (Siksi ei suositella )

  2. 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 tai exit, aivan kuten olet kutsunut sisäkkäisen bash 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>.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *