Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[solved] SSH - Agent in einem Skript starten ?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
geist_der_foren
Newbie
Newbie
Beiträge: 39
Registriert: 15. Dez 2003, 11:44

[solved] SSH - Agent in einem Skript starten ?

Beitrag von geist_der_foren »

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: Alles auswählen

eval `ssh-agent`; ssh-add /home/username/.ssh/identity
Wenn ich nun das skript mit ./agent ausführe kommt folgende Meldung:

Code: Alles auswählen

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: Alles auswählen

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
Newbie
Beiträge: 40
Registriert: 10. Mär 2004, 15:51
Wohnort: Bonn

Beitrag von trooperle »

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
Newbie
Beiträge: 40
Registriert: 10. Mär 2004, 15:51
Wohnort: Bonn

Beitrag von trooperle »

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
geist_der_foren
Newbie
Newbie
Beiträge: 39
Registriert: 15. Dez 2003, 11:44

Beitrag von geist_der_foren »

@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
Antworten