Ersehen, ob Service läuft

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Hallo Leute

Wenn ich in den Systemeinstellungen unter "Sharing" meine Services, wie SSH, FTP, SMB usw. anklicke, dann kann ich sie starten und beenden, klar.

Ich schreibe mir allerdings gerade einige Bashscripte, die an einer Stelle feststellen sollen, ob und welche Services laufen. Da beispielsweise SSH nicht in der Prozessliste auftaucht, wird es wohl einen Überservice geben, der den entsprechenden Daemon bei Bedarf startet.

Welcher Prozess ist das und wie arbeite ich damit?
Es wäre auch interessant für mich zu erfahren, wie ich ihn per Konsole bediene, um die Services selbst zu starten und zu beenden.

Ist irgendwie komisch. Unter Linux kenne ich das alles in- und auswendig und hier sitz ich trotz Bash wie nen Fisch im Trockenen. ;)
 

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Der prozess heißt wohl eher sshd, aber das er prozess läuft heißt ja noch nicht zwingend das er richtig läuft.. vielleicht einfach per grep aus netstat guggen ob der port offen ist?!
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Der prozess heißt wohl eher sshd,
Ja, so bin ichs auf Maschinen gewohnt, die nen Extra-SSH-Daemon ständig laufen haben.
Ein ps -e | grep ssh bringt da schon Ergebnisse. Aber das ist ja hier nicht der Fall.

aber das er prozess läuft heißt ja noch nicht zwingend das er richtig läuft.. vielleicht einfach per grep aus netstat guggen ob der port offen ist?!
Naja, vorher hab ich's per "nmap -v -p 22 localhost | grep ssh" gecheckt, was auch funktioniert und in etwa der netstat-Methode entspricht. Aber irgendwie ist das unsauber, weil man hier relativ lange warten muss.


Danke für den Link, Trapper. Den studiere ich dann mal durch.
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874

tfc

Ontario
Registriert
21.07.07
Beiträge
348
SSH läuft übrigens "on demand" auf OS X. Wenn eine Anfrage auf dessen Port kommt, dann aktiviert ihn launchd.

Genau davon ging ich ja aus. Und das ist ja der Grund, wieso es nicht in der Prozessliste auftaucht.

Nach ein wenig Lesen habe ich herausgefunden, dass "launchctl list | grep ssh" gut geht.
Problem: Das Script, das ich schreibe, soll auf keinen Fall etwas mit Rootberechtigungen am Hut haben. Als Normaluser zeigt launchctl aber auch nur an, was als Normaluser gestartet wurde...
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Wahrscheinlich, weil der sshd-Prozess nur dann existiert, wenn gerade jemand sich via SSH eingeloggt hat und sonst nicht - er den Zustand des Dienstes SSH aber unabhängig von dessen aktueller Nutzung abfragen will.
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Mal eine Frage von der anderen Seite, was soll das Skript denn überhaupt tun und warum muß es feststellen ob SSH aktiv ist, bzw. ob launchd einen sshd starten würde falls jemand eine Verbindung versuchte?
Gruß Pepi
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Wahrscheinlich, weil der sshd-Prozess nur dann existiert, wenn gerade jemand sich via SSH eingeloggt hat und sonst nicht - er den Zustand des Dienstes SSH aber unabhängig von dessen aktueller Nutzung abfragen will.

Ja, richtig.

Mal eine Frage von der anderen Seite, was soll das Skript denn überhaupt tun und warum muß es feststellen ob SSH aktiv ist, bzw. ob launchd einen sshd starten würde falls jemand eine Verbindung versuchte?
Gruß Pepi

Ich habe ein Script, das mir bestimmte Informationen auf einen Blick anzeigt. Der Status des SSH-Servers gehört dazu.
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
Du wirst wohl nicht um
sudo launchctl list
herumkommen, weil die Instanz von launchd, die für root tätig ist, den SSH-Dämon kontrolliert.
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Dann bliebe wohl nur noch als Alternative einen Verbindungsversuch auf den Port zu machen. Das überprüft zwar nicht explizit ob launchd den sshd starten würde, aber immerhin ob der Port erreichbar ist und ein TCP connect zuläßt.

Für localhost beispielsweise:
Code:
nc -z 127.0.0.1 22
Gibt 0 zurück wenn der Port verbunden werden konnte, und 1 bei einem Fehler. Siehe auch man nc(1).
Gruß Pepi
 
Zuletzt bearbeitet:

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Danke, Rastafari. Genau danach habe ich gesucht. Funktioniert perfekt.
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
service --list
zeigt jedoch "ssh" an, egal ob der Dämon geladen ist (ssh login klapp) oder nicht (ssh login klappt nicht).
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Daher ist --list auch eine unpassende Option. Allerdings:
--test-if-configured-on service
Exit with status 0 if the service is currently enabled. Other-
wise, exit with status 1.
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
Schauen wir mal:

KeyWest:~ macmark$ service --test-if-available ssh
KeyWest:~ macmark$ echo $?
0
KeyWest:~ macmark$ sudo launchctl unload -F /System/Library/LaunchDaemons/ssh.plist
KeyWest:~ macmark$ ssh keywest
ssh: connect to host keywest port 22: Connection refused
KeyWest:~ macmark$ service --test-if-available ssh
KeyWest:~ macmark$ echo $?
0
KeyWest:~ macmark$ sudo launchctl load -F /System/Library/LaunchDaemons/ssh.plist
KeyWest:~ macmark$ ssh keywest
Password:

KeyWest:~ macmark$ service --test-if-available ssh
KeyWest:~ macmark$ echo $?
0

Für mich sieht der service-Befehl nicht nutzbringend aus hier.
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Nunja, kein Wunder da --test-if-available != --test-if-configured-on o_O
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
Nunja, kein Wunder da --test-if-available != --test-if-configured-on o_O

Schön, probieren wir das auch durch:

KeyWest:~ macmark$ sudo launchctl load -F /System/Library/LaunchDaemons/ssh.plist
KeyWest:~ macmark$ service --test-if-configured-on ssh
KeyWest:~ macmark$ echo $?
0
KeyWest:~ macmark$ ssh keywest
Password:

KeyWest:~ macmark$ sudo launchctl unload -F /System/Library/LaunchDaemons/ssh.plist
Password:
KeyWest:~ macmark$ ssh keywest
ssh: connect to host keywest port 22: Connection refused
KeyWest:~ macmark$ service --test-if-configured-on ssh
KeyWest:~ macmark$ echo $?
0
KeyWest:~ macmark$ sudo launchctl load -F /System/Library/LaunchDaemons/ssh.plist
KeyWest:~ macmark$ ssh keywest
Password:

KeyWest:~ macmark$ service --test-if-configured-on ssh
KeyWest:~ macmark$ echo $?
0

Immer noch nicht nutzbringend …
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Hm, also aktiviert und deaktiviert über das Sharing-Panel via GUI klappt es bei mir wunderbar...