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

Wie kann man einem zweiten ssh Server einen anderen Namen im Systemlog geben?

framp

Moderator
Teammitglied
Demnaechst werde ich fuer ein paar Wochen in China weilen. Die chinesische Mauer werde ich mit einem bewaehrten VPN ueberwinden (astrill). Normalerweise connecte ich per OpenVPN oder Wireguard auf mein Heimnetzwerk. Dummerweise funktioniert das nicht denn wenn ich einen von beiden VPN Clients starte terminiert sich der astrill VPN client.

Kein Problem - man kann ja auch ueber ssh tunneln. Somit habe ich einen zweiten ssh Server bei mir @home aufgesetzt (nur key auth Login moeglich, Port 22 wird nicht genutzt) und alles funktioniert wie erwartet: Ich kann kann per ssh und HTTPS ueber den astrill VPN auf mein Netzwerk @home zugreifen.

Leider kann ich im log nicht unterscheiden welche ssh Meldungen vom normalen ssh Server geschrieben werden und welche von meinem China ssh Server :-(.

Sep 9 22:42:53 troubadix sshd[383]: Server listening on 0.0.0.0 port xxxx Sep 9 22:42:53 troubadix sshd[383]: Server listening on :: port xxxx. Sep 9 22:42:53 troubadix sshd[387]: Server listening on 0.0.0.0 port 22. Sep 9 22:42:53 troubadix sshd[387]: Server listening on :: port 22.

Wie man sieht loggen beide ssd Server mit "sshd". Ich moechte aber dass mein dedizierter China ssh Server sich anders im Log identifiziert. Ich habe die systemd.services vom normalen ssh Server kopiert und entsprechend angepasst dass eine andere sshd config genutzt wird. Weiss jemand wo und wie ich das aendern kann?
 
OP
framp

framp

Moderator
Teammitglied
Leider habe ich etwas entscheidenes vergessen zu eraehnen: Ich moechte mit fail2ban in /var/log/auth.log bestimmte Meldungen per Regex abgreifen. Das aber nur fuer den zweiten sshd. Anbei drei Zeilen aus dem Log wo ich mich einmal bei dem einen und einmal bei dem andere sshd angemeldet habe. Die PID hilft nicht zum identifizieren. Staende z.B. sshd2 statt sshd waere das kein Problem.

Sep 11 12:30:00 troubadix sshd[7311]: Connection closed by authenticating user pi 192.168.0.100 port 43444 [preauth] Sep 11 12:33:10 troubadix sshd[7322]: Connection closed by authenticating user pi 192.168.0.100 port 43176 [preauth] Sep 11 12:33:14 troubadix sshd[7324]: Connection closed by authenticating user pi 192.168.0.100 port 54242 [preauth]
 
entsprechend angepasst dass eine andere sshd config genutzt wird.
Damit kannst du die beiden server im jeweiligen config über die syslog facility trennen.
z,B.
erster sshd hat: SyslogFacility AUTH
zweiter sshd hat: SyslogFacility DAEMON
in /var/log/auth.log
Hier landet nur mehr der erste, der zweite sollte nach daemon.log schreiben.
Das wäre ein Vorschlag, es gibt noch andere Möglichkeiten, die beiden zu unterscheiden.
 
Zuletzt bearbeitet:
OP
framp

framp

Moderator
Teammitglied
Netter Workaround (y)

Gibt es nicht irgendwo tief im Systemd eine Moeglichkeit in einem Service den Namen zu konfigurieren mit dem der Service in Logs benamst werden kann? Ich habe leider keine hier gefunden.

Gut. Wenn es wirklich keinen "normalen" Weg bei Systemd gibt das zu konfigurieren werde ich den Workaround natuerlich nutzen. Letztendlich "Entscheidend ist was hinten raus kommt" (Zitat Helmut Kohl :D)
 
OP
framp

framp

Moderator
Teammitglied
Habe es eben mit dem Workaround probiert. Es funktioniert - aber nur fuer den sshd Service. Der forked natuerlich immer einen neuen Prozess mit eigener PID wenn eine neue Verbindung aufgebaut wird und saemtliche Meldungen von dem Fork landen in auth.log :(
 
von dem Fork landen in auth.log
Damit habe ich nicht gerechnet. Leider habe ich nur kurz Zeit ..
Workaround SyslogFacility wieder zurück.
2. Variante mit pid, wie @Sauerland vorgeschlagen hat.

Im jeweiligen config:
PidFile /run/sshd_1.pid
bzw.
PidFile /run/sshd_2.pid

# cat /run/sshd_2.pid
gibt die parent pid vom zweiten sshd zurück.

Irgendein sshd forked child, dieses child_pid steht im log und wird von dir aus dem log extrahiert.
mit
# ps -o ppid= -p child_pid
bekommst du das pid des jeweiligen parent sshd zurück.
Stimmt dieses parent_pid mit dem pid in /run/sshd_2.pid überein?
Ja, Verbindung ist vom sshd_2

Gruß
 
OP
framp

framp

Moderator
Teammitglied
Ist auch ein netter Workaround (y)

Jetzt muss ich nur noch rausfinden wie ich in fail2ban auch bash Code zusaetzlich zu Regex nutzen kann um einen Match zu erhalten :)
 
OP
framp

framp

Moderator
Teammitglied
Hm ... Du hast Recht. Eigenlich will ich nur wissen ob und wieviel zurückgewiesene Zugriffsversuche stattfinden. Da kann ich auch das log auswerten und brauche nicht den Kopfstand mir fail2ban :)
 

marce

Guru
Doofe Idee (hab's nicht ausprobiert): Wenn Du das systemd-Service-File kopiert hast, kannst Du darin ja den ExecStart=-Part anpassen auf z.B. ExecStart=/usr/sbin/china_sshd -D $OPTIONS und dann noch einen Link von /usr/sbin/china_sshd auf /usr/sbin/sshd setzen. Dann solltest Du sowohl in der Prozessliste als auch im Logfile des china_sshd als Prozessnamen sehen / stehen haben.
 
OP
framp

framp

Moderator
Teammitglied
So doof ist die Idee gar nicht :biggrin:. Das klappt genau so (y). Ich sehe im AUTH log china_sshd 👏
 
Oben