GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie überprüfe ich, ob ssh-agent bereits in bash läuft?

Ist es neben all dem auch möglich, einen existierenden ssh-agent-Prozess zu finden und ihm meine Schlüssel hinzuzufügen?

Ja. Wir können die Verbindungsinformationen in einer Datei speichern:

# 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

Dieser Code stammt aus den Fallstricken von ssh-Agenten, der sowohl die Fallstricke dessen beschreibt, was Sie derzeit tun, diesen Ansatz, als auch, wie Sie ssh-ident verwenden sollten, um dies für Sie zu tun.

Wenn Sie ssh-agent nur ausführen möchten, wenn es nicht ausgeführt wird, und sonst nichts tun:

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

Dies gewährleistet jedoch nicht ssh-agent zugänglich sein (nur weil es läuft, heißt das nicht, dass wir $SSH_AGENT_PID haben für ssh-add zu verbinden).


Nein, wirklich, wie man prüft, ob ssh-agent läuft bereits in bash?

Bisherige Antworten scheinen die ursprüngliche Frage nicht zu beantworten...

Hier ist, was für mich funktioniert:

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

Das stammt von hier


Wenn Sie möchten, dass es direkt nach dem Beenden des Skripts beendet wird, können Sie dies einfach nach der eval-Zeile hinzufügen:

trap "kill $SSH_AGENT_PID" exit

Oder:

trap "ssh-agent -k" exit

$SSH_AGENT_PID wird in der Auswertung von ssh-agent -s gesetzt .

Sie sollten in der Lage sein, ssh-agent zu finden s durch Scannen durch /tmp/ssh-* und rekonstruiere die SSH_AGENT Variablen daraus (SSH_AUTH_SOCK und SSH_AGENT_PID ).


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

Einzeiliger Befehl. Beim ersten Ausführen wird ssh-agent gestartet. Beim zweiten Ausführen wird der SSH-Agent nicht gestartet. Einfacher und eleganter Kumpel !!!


Linux
  1. So überprüfen Sie, welche Version von Postgres ausgeführt/installiert wird

  2. Wie überprüfe ich den Fortschritt des Laufens von Cp?

  3. Wie überprüfe ich die Teilzeichenfolge in Shell Script Bash?

  4. So überprüfen Sie, ob Telnet auf einem Server ausgeführt wird

  5. So prüfen Sie, ob String in Bash einen Teilstring enthält

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So prüfen Sie, ob eine Zeichenfolge in Bash eine Teilzeichenfolge enthält

So überprüfen Sie alle laufenden Dienste in Linux

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?