• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] SSH - Agent in einem Skript starten ?

Hi @all,

ich werde einfach nicht schlau daraus, hab schon mit bei www.google.de gesucht, aber nicht gefunden.

Ich würde gerne den ssh-agent starten und den key mit ssh-add über ein skript starten. Ich hab eine Datei "agent" angelegt, mit chmod 744 Rechte vergeben und folgendes eingetragen:
Code:
eval `ssh-agent`; ssh-add /home/username/.ssh/identity
Wenn ich nun das skript mit ./agent ausführe kommt folgende Meldung:
Code:
Agent pid 1203
Enter passphrase for /home/sag10c0/.ssh/identity:
Identity added: /home/username/.ssh/identity (/home/sag10c0/.ssh/identity)
Ich gebt das passwort ein und der schlüssel wird nach "anscheinend" geladen. Wenn ich es aber dann mit ssh-add- L überprüfen möchete, funkt das nicht
Code:
Could not open a connection to your authentication agent.
Das Komische dabei ist, wenn den oben genannten Code in der ./profile reinlege und mich dann einlogge funktioniert das wunder bar ?!
Weiß jemand, wieso das so ist ? Danke schon mal für die Hilfe

mfg

geist_der_foren
 

trooperle

Newbie
Hi,
jaja, der liebe Agent:
Grund ist folgender:
wenn Du ssh-agent aufrufst, dann kommt sowas an Output:

SSH_AUTH_SOCK=/tmp/ssh-Wjm19196/agent.19196; export SSH_AUTH_SOCK;
SSH_AGENT_PID=19197; export SSH_AGENT_PID;
echo Agent pid 19197;

Dummerweise führt er das nur für die lokale shell aus, startest du aus einem anderen fenster ne bash, weiss der nix davon.

Somit zur Lösung deines Problems ( könnte noch was verfeinert werden, hab das auf der Arbeit vor ein paar Tagen geschrieben, bin aber erst nächste Woche dienstag wieder da )

leg eine temporäre Datei an
TMP_FILE=/tmp/.ssh_agent_data
ssh-agent > $TMP_FILE

dann schreibt er die Daten da rein.

Anschliessend die beiden Variablen SSH_AUTH_SOCK und SSH_AGENT_PID extrahieren.
Hier ne Quick&Dirty-Lösung

TEST=` cat $TMP_FILE`
SSH_AUTH_SOCK=`echo $TEST | cut -f 1 -d';' |cut -f 2 -d'=' `
SSH_AGENT_PID=`echo $TEST | cut -f 3 -d ';' |cut -f 2 -d'=' `

export SSH_AUTH_SOCK
export SSH_AGENT_PID

WICHTIG! der Export bezieht sich nur auf die Shell, in der Du das eingibst. D.h. soll es ausserhalb deines skripts laufen, musst du dir die zeilen in ein skript schreiben und dann sourcen.

Also:
Inhalt von test.sh

#!/bin/bash
TMP_FILE=/tmp/.ssh_agent_data
ssh-agent > $TMP_FILE

#dann schreibt er die Daten da rein.

#Anschliessend die beiden Variablen SSH_AUTH_SOCK und SSH_AGENT_PID extrahieren.
#Hier ne Quick&Dirty-Lösung

TEST=` cat $TMP_FILE`
VAR1=`echo $TEST | cut -f 1 -d';' `
VAR2=`echo $TEST | cut -f 3 -d ';'`

set $VAR1
set $VAR2


dann mit
. test.sh aufrufen

Hope that helps - andernfalls einfach meckern
 

trooperle

Newbie
Ach ja, ich bin verwirrt. Du wolltest ja wissen warum das in der Profile geht:

Ganz einfach: Die Profile wird "ausgeführt", bevor du deine shell kriegst. D.h. in deiner Shell hat er die Variablen dann bereits gesetzt, daher gehts dort dann.
Problem: Er startet den Agent für jede Shell, d.h. das musst du noch in der profile abfangen z.B. falls der prozess läuft -> nicht nochmal starten. Oder einfach über die obige Lösung mit der temporären Datei:

Prüfen ob die Datei existert:
Ja: Inhalt lesen und prüfen ob es den agent mit der PID noch gibt
NEIN: neuen starten und datei überschreiben.

noch was nützliches:

leg ne Datei
~./.bash_logout

mit Inhalt
ssh-agent -k
rm /tmp/.ssh_agent_data

dann beendet er den Agent sauber und entfernt die Datei

So, muss zur Bahn
Trooperle
 
@trooperle

wow ... Danke das hat mir wirklich weiter geholfen :D
Dein zweiter beitrag hat sich auf die eigentliche frage bezogen und dein erster war ziemlich hilfreich und das jetzt endlich alles zu blicken...
1000 Dank ... ;)

mfg

geist_der_foren
 
Oben