shell ohne Eingabemöglichkeit
shell ohne Eingabemöglichkeit
Hallo!
Ich verwende SSH an Debian um einen den Windows RDP-Port sicher über das Internet zu verbinden. Damit die SSH-Anmeldung funktioniert benötigt der Benutzer eine Shell. Ich will aber unterbinden, dass man über diese Shel etwas eingeben kann. Deshalb habe ich ein Script geschrieben, welches die Uhrzeit ausgiebt, dann 100s schläft, dann wieder die Uhrzeit ausgibt.
Nun habe ich zwei Probleme:
1. Benötigt dieses Script ca 10% Systemressourcen auf meinem PII 500. Gibt es eine andere Möglichkeit, um den Rechner weniger zu belasten?
2. Kann ich mich über SSH dann nicht ausloggen sondern die Verbindung nur einfach trennen. Das hat aber zur Folge, dass mein Script weiterläuft bis ich entweder den Server neu boote oder die Prozesse "aufräume" ...
Ich verwende SSH an Debian um einen den Windows RDP-Port sicher über das Internet zu verbinden. Damit die SSH-Anmeldung funktioniert benötigt der Benutzer eine Shell. Ich will aber unterbinden, dass man über diese Shel etwas eingeben kann. Deshalb habe ich ein Script geschrieben, welches die Uhrzeit ausgiebt, dann 100s schläft, dann wieder die Uhrzeit ausgibt.
Nun habe ich zwei Probleme:
1. Benötigt dieses Script ca 10% Systemressourcen auf meinem PII 500. Gibt es eine andere Möglichkeit, um den Rechner weniger zu belasten?
2. Kann ich mich über SSH dann nicht ausloggen sondern die Verbindung nur einfach trennen. Das hat aber zur Folge, dass mein Script weiterläuft bis ich entweder den Server neu boote oder die Prozesse "aufräume" ...
-
- Beiträge: 465
- Registriert: 18.01.2005 02:11:40
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Schweiz - Kanton St. Gallen
-
Kontaktdaten:
Benützt du
um zu warten? Bei mir benötigt diese funktion genau 0% cpu...
Eine andere Möglichkeit ist in /etc/passwd dem Benutzter die Shell /bin/false zuzuteilen, dann kann er zwar eine SSH-Session öffnen, nachher ist aber ende... Das sieht so aus:
Code: Alles auswählen
sleep 100
Eine andere Möglichkeit ist in /etc/passwd dem Benutzter die Shell /bin/false zuzuteilen, dann kann er zwar eine SSH-Session öffnen, nachher ist aber ende... Das sieht so aus:
Code: Alles auswählen
username:x:101:103::/var/run/dbus:/bin/false
hi,
Man kann im Public Key (normal in "$HOME/.ssh/authorized_keys") Optionen angeben.
Evt. macht die Option "no-pty" das richtige. Der Zeilenanfang eines solchen Keys
sieht dann so aehnlich aus:
Einzelheiten stehen in "man sshd" unter AUTHORIZED_KEYS FILE FORMAT.
Man kann im Public Key (normal in "$HOME/.ssh/authorized_keys") Optionen angeben.
Evt. macht die Option "no-pty" das richtige. Der Zeilenanfang eines solchen Keys
sieht dann so aehnlich aus:
Code: Alles auswählen
no-pty ssh-dss AAAAB3NzaC1kc3MAAAC...
Beware of programmers who carry screwdrivers.
Vielen Dank schon mal für eure Antworten.
Die Shell /bin/false verhindert das Anmelden mit Putty ganz. Putty stellt ja vorrangig eine
Eingabe-Aufforderung zur Verfügung und bricht deshalb ganz ab.
Bei no-pty im Schlüssel verarbeitet der Server die Eingabe zwar nicht aber im Shell-Fenster kann ich erst einmal jeden Blödsinn eingeben - gibt es vieleicht eine Möglichkeit dieses abzuschalten.
Außerdem habe ich festgestellt:
Die hohe Systemlast erzeugt mein Script erst, wenn ich die SSH-Verbindung einfach getrennt habe. Das Script, welches ich als shell in Passwd eintrage wird dann nicht beendet sondert läuft weiter.
Wie bekomme ich es denn hin, dass das Script auch dann beendet wird, wenn die Verbindung einfach "abreißt" ?
Die Shell /bin/false verhindert das Anmelden mit Putty ganz. Putty stellt ja vorrangig eine
Eingabe-Aufforderung zur Verfügung und bricht deshalb ganz ab.
Bei no-pty im Schlüssel verarbeitet der Server die Eingabe zwar nicht aber im Shell-Fenster kann ich erst einmal jeden Blödsinn eingeben - gibt es vieleicht eine Möglichkeit dieses abzuschalten.
Außerdem habe ich festgestellt:
Die hohe Systemlast erzeugt mein Script erst, wenn ich die SSH-Verbindung einfach getrennt habe. Das Script, welches ich als shell in Passwd eintrage wird dann nicht beendet sondert läuft weiter.
Wie bekomme ich es denn hin, dass das Script auch dann beendet wird, wenn die Verbindung einfach "abreißt" ?
In der Putty-configuration unter "Terminal -> Line discipline options -> Local echo"iTob hat geschrieben:Bei no-pty im Schlüssel verarbeitet der Server die Eingabe zwar nicht aber im Shell-Fenster kann ich erst einmal jeden Blödsinn eingeben - gibt es vieleicht eine Möglichkeit dieses abzuschalten.
kann man "Force off" waehlen.
Die "no-pty" Option muss nicht im Key stehen, kann man auch im Putty einstellen:
"Connection -> SSH -> Protocol Options": "Don't allocate a pseudo-terminal".
Und dann gibt es noch die Kommandozeilen-Version von Putty namens "Plink".
Damit geht im wesentlichen das gleiche, aber evt. kann der versierte Windows-
Benutzer das Plink so starten, dass garkein Fenster erscheint? Mit Win98 konnte
man unter "Eigenschaften einer Verknuepfung" einiges machen.
Beware of programmers who carry screwdrivers.
Ich wollte diese Eingabe-Sperre aber nicht von der Client-Seite aus sondern vom Server für einen bestimmten Benutzer eingrenzen, damit es Benutzer (incl. Schlüssel) gibt, welche keinen Shellzugriff haben. Damit will ich die Gefahr verringern, welche von "verlorene" Schlüssel ausgehen kann.
Das ganze funktioniert ja mit einem Script ganz gut, welches statt der Shell gestartet wird. Nur wie kann ich dieses Script beenden wenn kein ordnungsgemäßer logout stattfindet? Kann ich im Script abprüfen ob die entsprechende SSH-Verbindung noch steht?
Das ganze funktioniert ja mit einem Script ganz gut, welches statt der Shell gestartet wird. Nur wie kann ich dieses Script beenden wenn kein ordnungsgemäßer logout stattfindet? Kann ich im Script abprüfen ob die entsprechende SSH-Verbindung noch steht?
Ich habe als benutzer-shell auf folgendes script gesetzt:
Solange die Verbindung steht wird aller 100s eine Datums und Uhrzeit-Zeile erzeugt. Tastatureingaben schluckt read ohne Anzeige und mit e(Return) läßt sich die Verbindung trennen. Dieses Script benötigt auch kaum Ressourccen.
Wenn ich aber nun die Verbindung trenne ohne dieses Script mittels e(Return) zu beenden läuft der Prozess weiter. Ab diesem Zeitpunkt lastet dieses Script das System zu 100% aus und läuft bis ich ihn per kill-Befehl beende.
Kann ich dieses Script anders schreiben oder gibt es eine Möglichkeit diesen Prozess zu beenden sobald die ssh-Verbindung unterbrochen wird?
Code: Alles auswählen
read -ers -t1 a
while [ "$a" != "e" ]
do
read -t100 -ers a
date
done
exit 0
Wenn ich aber nun die Verbindung trenne ohne dieses Script mittels e(Return) zu beenden läuft der Prozess weiter. Ab diesem Zeitpunkt lastet dieses Script das System zu 100% aus und läuft bis ich ihn per kill-Befehl beende.
Kann ich dieses Script anders schreiben oder gibt es eine Möglichkeit diesen Prozess zu beenden sobald die ssh-Verbindung unterbrochen wird?
vielleicht hilft dir das:
plink anstatt von putty
ssh -N anstatt von ssh
/bin/false als Shell
oder etwas ausführlicher:
http://www.debianforum.de/forum/viewtopic.php?t=43242
plink anstatt von putty
ssh -N anstatt von ssh
/bin/false als Shell
oder etwas ausführlicher:
http://www.debianforum.de/forum/viewtopic.php?t=43242
Das wirst du auch nicht mehr bekommen können, da du dich ja mit -N (no shell) verbindest und mit /bin/false erhälst du keine Shell (obwohl da auch was anderes stehen könnte). Das ist der Preis für deine Sicherheit. Aber man merkt doch anschließend, ob das SSH-Forwarding möglich ist. Oder was willst du damit bezwecken?
Es ist nicht weiter schlimm, es geht mir nur um die Benutzerfreundlichkeit...
Ich will durch diesen Tunnel einen Benutzer per RDP auf WinXP zugreifen lassen. Und den Clienten kann man eben erst starten wenn der Tunnel steht. Deshalb wäre eine Meldung hilfreich, aber eben nicht zwingend notwendig.
Noch ne andere Sache: mit no-port-forwarding kann ich doch im Schlüssel das forwarding ganz deaktivieren. Kann ich dort auch festlegen, dass der Benutzer nur einen bestimmten Port forwarden darf? Leider habe ich darüber noch nichts gefunden.
Ich will durch diesen Tunnel einen Benutzer per RDP auf WinXP zugreifen lassen. Und den Clienten kann man eben erst starten wenn der Tunnel steht. Deshalb wäre eine Meldung hilfreich, aber eben nicht zwingend notwendig.
Noch ne andere Sache: mit no-port-forwarding kann ich doch im Schlüssel das forwarding ganz deaktivieren. Kann ich dort auch festlegen, dass der Benutzer nur einen bestimmten Port forwarden darf? Leider habe ich darüber noch nichts gefunden.
sagt mir leider nichts, mag es aber wohl geben. Generell sollte man entweder den Leuten vertrauen, denen man den Zugang erlaubt oder besser:no-port-forwarding
mit iptables nur den Zugriff auf die speziellen Ports erlauben
Aber Port-Forwarding stellt immer ein Risiko dar. So können diese Benutzer evtl. auf lokale Ports zugreifen, die eigentlich durch die Firewall verhindert werden.