Jail login (mit ssh) über virtuelle Terminal!

rexmaster

complex.home
Hallo!

Auf meinem Server laufen mehrere Jails einwandfrei.
Bis jetzt melde ich mich immer mit ssh an (funkt ebenfalls problemlos).

Ich würde jetzt nur gerne wissen:

1) Ist es möglich sich an einer jail direkt über ein virtuelles Terminal (am Hostsystem) anzumelden (ohne ssh, ohne telnet, etc.)?

2) Falls 1) nicht funktioniert, ist es möglich ssh direkt an ein virtuelles Terminal zu koppeln (z.B. in /etc/ttys --> 1 x anmelden statt 2 x)?

mfg
rex
 
1. AFAIK nicht.

2. Du könntest SSH auf RSA-Login konfigurieren und dir ein Script schreiben, welches eine Shell starten und eine Verbindung herstellt. Dies kannst du in /etc/ttys eintragen. Ja, dass ist ein "dirty hack"!
 
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!

icon4.gif
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.
 
Zurück
Oben