GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat, zda ssh-agent již běží v bash?

Je také možné spolu s tím vším najít existující proces ssh-agenta a přidat do něj moje klíče?

Ano. Informace o připojení můžeme uložit do souboru:

# Ensure agent is running
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
    # Could not open a connection to your authentication agent.

    # Load stored agent connection info.
    test -r ~/.ssh-agent && \
        eval "$(<~/.ssh-agent)" >/dev/null

    ssh-add -l &>/dev/null
    if [ "$?" == 2 ]; then
        # Start agent and store agent connection info.
        (umask 066; ssh-agent > ~/.ssh-agent)
        eval "$(<~/.ssh-agent)" >/dev/null
    fi
fi

# Load identities
ssh-add -l &>/dev/null
if [ "$?" == 1 ]; then
    # The agent has no identities.
    # Time to add one.
    ssh-add -t 4h
fi

Tento kód je z úskalí agentů ssh, který popisuje úskalí toho, co právě děláte, tohoto přístupu a jak byste to měli pomocí ssh-ident udělat za vás.

Pokud chcete ssh-agent spustit pouze v případě, že neběží, a jinak nedělat nic:

if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
    echo "ssh-agent is already running"
else
    eval $(ssh-agent -s)
    if [ "$(ssh-add -l)" == "The agent has no identities." ] ; then
        ssh-add ~/.ssh/id_rsa
    fi

    # Don't leave extra agents around: kill it on exit. You may not want this part.
    trap "ssh-agent -k" exit
fi

To však nezaručuje ssh-agent bude přístupný (to, že běží, neznamená, že máme $SSH_AGENT_PID pro ssh-add pro připojení).


Ne, opravdu, jak zkontrolovat, zda ssh-agent již běží v bash?

Zdá se, že dosavadní odpovědi neodpovídají na původní otázku...

Zde je to, co pro mě funguje:

if ps -p $SSH_AGENT_PID > /dev/null
then
   echo "ssh-agent is already running"
   # Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi

Toto bylo převzato odtud


Pokud chcete, aby byl zabit hned po ukončení skriptu, můžete přidat toto za řádek eval:

trap "kill $SSH_AGENT_PID" exit

Nebo:

trap "ssh-agent -k" exit

$SSH_AGENT_PID nastaví se na hodnotu ssh-agent -s .

Měli byste být schopni najít běžící ssh-agent s skenováním přes /tmp/ssh-* a rekonstruovat SSH_AGENT proměnné z něj (SSH_AUTH_SOCK a SSH_AGENT_PID ).


ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"

Jednořádkový příkaz. První spuštění spustí ssh-agent. Spuštění podruhé nespustí ssh-agenta. Jednoduché a elegantní Mate !!!


Linux
  1. Jak zkontrolovat průběh běhu Cp?

  2. Jak zkontrolovat podřetězec v Shell Script Bash?

  3. Jak zkontrolovat syslog v Bash na Linuxu?

  1. Jak zkontrolovat, zda je soubor prázdný v Bash?

  2. Jak zkontrolovat, zda běží démoni Hadoop?

  3. Jak zkontrolovat, zda konkrétní služba běží na Ubuntu

  1. Jak zkontrolovat, která verze Postgresu je spuštěná/nainstalovaná

  2. Jak zkontrolovat, zda má Bash zranitelnost Shellshock?

  3. Zkontrolovat proces, pokud je stejný?