Ich lasse gerne
zwei verschiedene sshd-Instanzen auf meinen Rechnern laufen: Einen "ganz normal" auf Port 21, der aber nur innen aus dem Netzwerk erreichbar ist. Und zusätzlich noch einen zweiten, der dann z.B. über den DSL-Anschluss aus dem Internet erreichbar ist. Auf dem zweiten habe ich zusätzliche Sicherheitseinstellungen laufen, die mich intern nur nerven würden, z.B. Beschränkung auf bestimmte Usernamen, Authentifizierung ausschließlich per Key oder was auch immer. Außerdem packe ich den zweiten sshd auf Port 443, das ist sehr praktisch, wenn man z.B. irgendwo in einem Hotel hinter einem HTTP-Proxy festsitzt.
Die
Konfiguration doppele ich einfach von
/etc/ssh/sshd_config nach
/etc/ssh/sshd_config.2 und passe sie entsprechend meinen Sonderwünschen an (z.B.
Port,
AllowUsers). Ganz wichtig:
PidFile sollte man auch auf z.B.
/var/run/sshd.2.pid ändern, damit das nicht der Originalkonfiguration in die Quere kommt.
Da ich auch mit einer
eigenen PAM-Konfiguration hantieren möchte (in meinem Fall für OATH, da wird ein weiteres Posting hier folgen) und mir keine Möglichkeit bekannt ist, eine zum Binary-Namen abweichende Konfiguration auszuwählen, habe ich
/usr/sbin/sshd nach
/usr/sbin/sshd2 gedoppelt. Ein Symlink reicht vollkommen aus und führt dazu, das Sicherheitsupdates des sshd-Paketes auch auf den gedoppelten sshd2 durchschlagen. Wenn man das gemacht hat, kann man unter
/etc/pam.d/sshd2 eine individuelle PAM-Konfiguration für die zweite SSH-Instanz erstellen.
Wer das nicht braucht, kann das mit dem Symlink auch weglassen.
Um den zweiten sshd zu starten, habe ich bisher unter Debian das
SysV-Initskript /etc/init.d/sshd editiert und die Zeilen, in denen sshd gestartet oder gestoppt wird, gedoppelt. Sämtliche Vorkommen des PID-Files im Skript sind auf das neue PID-File aus der Konfiguration anzupassen. Außerdem sind alle Starts des zweiten sshd um die Parameter
-f /etc/ssh/sshd_config.2 zu erweitern, um überhaupt die zweite Konfiguration auszuwählen. Und wer sich
/usr/sbin/sshd2 angelegt hat, muss natürlich auch das Binary in jedem gedoppelten Aufruf entsprechend anpassen.
Das ganze ist ziemlich eklig bei einem Distributionsupdate, da muss man sich durch die Änderungen am Initskript kämpfen und alles wieder manuell neu zusammenstricken. Immerhin führt jeder Start/Stop des originalen sshd auch automatisch zum Start/Stop der zweiten Instanz, so kommen Fixes aus Sicherheitsupdates in beiden Instanzen an. Da nur ein bestehendes Initskript editiert wurde, muss man nichts weiter bekannt machen, der Start der beiden Instanzen passiert ja bereits automatisch (so wie vorher die erste Instanz).
Mit
systemd unter Debian Jessie ist das jetzt alles anders und überraschenderweise erstaunlich einfach: Wie bisher braucht man eine zweite Konfiguration unter
/etc/ssh/ und je nach Wunsch das gesymlinkte zweite Binary. Da es keine Initskripte mehr gibt, kopiert man sich jetzt
/etc/systemd/system/sshd.service nach
/etc/systemd/system/sshd2.service und macht die folgenden Anpassungen:
- [Unit]->Description kann man um zweite Instanz oder sowas erweitern, dann findet man sich anschließend besser zurecht
- [Unit]->PartOf=sshd.service kommt neu dazu und ist der große Trick: Damit hängt man sich huckepack an die originale sshd-Instanz und bekommt alle Restarts mit, damit ist man bei Sicherheitsupdates automatisch mit dabei, wenn der sshd durchgestartet wird.
- An den Eintrag [Service]->ExecStart hängt man hinten wieder die Parameter -f, der auf die neue Konfigurationsdatei zeigt, an. Wenn man das gesymlinkte Binary benutzen will, ist auch das in diesem Eintrag einzubauen.
- [Service]->PIDFile fügt man neu hinzu und zeigt dort auf das neue PID-File aus der Konfiguration
- [Install]->Alias ändert man oder schmeißt es raus, sonst beißt sich das mit der Originalinstanz
Dann noch
systemctl enable sshd2 und
systemctl start sshd2 und man ist im Spiel.