Ich habe jetzt folgende Varianten gefunden bzw. probiert:
1. Möglichkeit:
Unter
http://etherboot.sourceforge.net/doc/html/sshterminal/t1.html gibt es eine Anleitung, wie man sich mittels mgetty und perl über ssh anmelden kann. Diese Methode funktioniert auch mit jexec (wie bei 3.)
--> Funktioniert einwandfrei, ist aber etwas mühsam und aufwendig.
2. Möglichkeit:
Verwendung von screen:
http://www.the-labs.com/FreeBSD/JailTools/cookbook.html#console_for_each_jail
--> Habe ich nicht ausprobiert!
3. Möglichkeit (verwende ich jetzt)
Ein typischer Terminaleintrag in /etc/ttys lautet:
Code:
ttyv5 "/usr/libexec/getty Pc" cons25 on secure
ttyv6 "/usr/libexec/getty Pc" cons25 on secure
In /etc/gettytab wird Pc definiert als:
Code:
P|Pc|Pc console:\
:ht:np:sp#115200:
Laut man gettytab ist es möglich das von getty aufgerufene Login-Programm (/bin/login) zu ändern (z.B.)
lo = Login-Programm (in dem Fall ein Shell-Script)
im = Text, den getty beim Login-Prompt ausgibt (z.B. FreeBSD/i386 ...)
ev = environment (z.B. Variablen, die im Script verwendet werden können)
Code:
J1|J1 console:\
:ht:np:sp#115200:lo=/etc/jail.login:im=\r\n%s/%m (intranet.%h) (%t)\r\n\r\n:ev=JAILNAME=1:
J2|J2 console:\
:ht:np:sp#115200:lo=/etc/jail.login:im=\r\n%s/%m (mail.%h) (%t)\r\n\r\n:ev=JAILNAME=2:
In /etc/ttys muß man jetzt Pc duch J1 oder J2 ersetzen:
Code:
ttyv5 "/usr/libexec/getty J1" cons25 on secure
ttyv6 "/usr/libexec/getty J2" cons25 on secure
Das Login-Script könnte dann bspw. so aussehen:
Code:
#!/bin/sh
/usr/sbin/jexec $JAILNAME /usr/bin/login $1 $2
getty übergibt 2 Parameter: $1=-p und §2=loginname
Nach erfolgreichem Login befindet man sich direkt in einer Shell der Jail!
Userid und Paßwort beziehen sich natürlich auf die Jail!
Aufpassen muß man mit den Jail-IDs! Wenn eine Jail nicht gestartet oder beendet wir, existiert die Jail-ID nicht mehr, oder eine andere Jail hat diese ID.
Eleganter wäre es, statt der ID die IP oder den Hostname an das Script zu übergeben.
Ob es eine saubere oder schmutzige Lösung ist, ist nebensächlich. Wichtig ist: Es funktioniert, ist schnell gemacht und man benötigt keine zusätzlichen packeges/ports.