ssh-Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

ssh-Script

Beitrag von Duff » 06.07.2006 23:28:41

Hallo,

ist es möglich, dass ich über ein Skript oder einen ssh-Befehl, eine Verbindung von einem Rechner 1 auf einen Rechner 3 bekomme, wobei ich von Rechner 1 über einen Rechner 2 gehen muss, um auf Rechner 3 zu gelangen.

Ich habe die public-keys der jeweiligen Rechner schon auf den Ziel-Rechnern hinterlegt. Sprich, ein ssh Rechner 2 (von Rechner 1 aus) funktioniert, ohne dass ich ein Passwort eingeben muss. Ein ssh (von Rechner 2 aus) zu Rechner 3 funktioniert auch ohne Passworteingabe.

Das ganze würde ich aber schon gerne von Rechner 1 aus starten können, so dass ich direkt auf Rechner 3 gelange.

Ein ssh Rechner 2 "ssh Rechner 3" funktioniert leider nicht.
Oh, yeah!

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: ssh-Script

Beitrag von jhr-online » 06.07.2006 23:32:50

Duff hat geschrieben:wobei ich von Rechner 1 über einen Rechner 2 gehen muss, um auf Rechner 3 zu gelangen.
Wenn du drüber gegangen bist, sind sie sowieso kaputt.
Duff hat geschrieben:Ein ssh (von Rechner 2 aus) zu Rechner 3 funktioniert auch ohne Passworteingabe.
...
Ein ssh Rechner 2 "ssh Rechner 3" funktioniert leider nicht.
Hä?

Und was ist mit ssh PC3 von PC1 aus?

jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

Benutzeravatar
DerAntiPro
Beiträge: 123
Registriert: 05.01.2005 02:40:08

Re: ssh-Script

Beitrag von DerAntiPro » 06.07.2006 23:53:07

jhr-online hat geschrieben:Und was ist mit ssh PC3 von PC1 aus?
er muss doch die verbindung über rechner 2 herstellen:
Duff hat geschrieben:wobei ich von Rechner 1 über einen Rechner 2 gehen muss, um auf Rechner 3 zu gelangen.
was genau ist denn die fehlermeldung bei

Code: Alles auswählen

ssh Rechner 2 "ssh Rechner 3"
?

mfg
Bei Risiken und Nebenwirkungen fragen Sie bitte Ihren Maintainer oder Supporter!
---
Der, der VORLAS UND LIST ist LINUS TORVALDS.

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Re: ssh-Script

Beitrag von markus_b » 07.07.2006 01:44:06

Duff hat geschrieben: ist es möglich, dass ich über ein Skript oder einen ssh-Befehl, eine Verbindung von einem Rechner 1 auf einen Rechner 3 bekomme, wobei ich von Rechner 1 über einen Rechner 2 gehen muss, um auf Rechner 3 zu gelangen.
Ich denke mit einem ssh Tunnel sollte das funktionieren.
Schau die mal die Option -L von ssh genauer an.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 07.07.2006 08:20:51

@DerAntiPro: Die Fehlermeldung sieht so aus:

Code: Alles auswählen

Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'Rechner 3' (RSA) to the list of known hosts.
process not attached to terminal
...
Not a terminal
stty: : Not a typewriter
Die Option -L schaue ich mir noch an. Wollte nur schon mal die Fehlermeldung posten.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 09:16:57

Leider komme ich mit der Option -L auch nicht weiter.

Bei ssh Rechner2 "ssh -L 23:Rechner:23" bekomme ich die Fehlermeldung, dass nur root die Ports weiterleiten darf.

Code: Alles auswählen

Privileged ports can only be forwarded by root.
Ich möchte das ganze aber ohne root-Rechte durchführen.

Noch jemand ne Idee?
Oh, yeah!

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.07.2006 09:22:08

Das ist halt so. Hat nichts mit ssh zu tun. Services die auf die Ports unter 1024 (oder so ähnlich, auf jeden fall dortrum) lauschen darf auf Unix-Systemen nur root starten.

Sonst könnte ja plötzlich ein User einen Webserver auf Port 80 aufsetzen, wenn da nicht schon vorher einer am laufen war... ;)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 20.07.2006 10:00:19

Hallo

was du suchst ist der -t Schalter fuer ssh. Der erzwingt dass ein pseudo tty allokiert wird auf dem Zielrechner, was wieder ssh braucht um zu starten.

also:

Code: Alles auswählen

ssh rechner1 -t ssh rechner2 -t ssh user@rechner3
als Beispiel

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 20.07.2006 10:29:51

peschmae hat geschrieben:Das ist halt so. Hat nichts mit ssh zu tun. Services die auf die Ports unter 1024 (oder so ähnlich, auf jeden fall dortrum) lauschen darf auf Unix-Systemen nur root starten.

Sonst könnte ja plötzlich ein User einen Webserver auf Port 80 aufsetzen, wenn da nicht schon vorher einer am laufen war... ;)

MfG Peschmä
ansonsten machst du es halt so:

Code: Alles auswählen

ssh -f -C -N -L 11000:Rechner3:22 Rechner2
ssh -p 11000 localhost
der 1. Befehl baut einen Tunnel von deinem lokalen Port 11000 über den Rechner2 an den Port 22 auf dem Rechner3 auf.. also wenn du dich dann auf den lokalen Port 11000 verbindest, ist das als wenn du dich auf den 22er Port auf Rechner3 anmeldest..

ansonsten halt die "-t" Option (die ich auch noch nicht in der Form kannte)
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 11:40:52

Danke für die vielen Antworten!

Leider funktionieren die beiden Vorschläge nicht. Ich habe aber auch vergessen, welche OS auf den jeweiligen Rechnern laufen.

Rechner1 --> SunOS
Rechner2 --> Linux
Rechner3 --> HP-UX
Oh, yeah!

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 20.07.2006 11:46:30

Duff hat geschrieben:Rechner1 --> SunOS
Rechner2 --> Linux
Rechner3 --> HP-UX
Es kommt jetzt darauf an welches SSH du speziell auf SunOS installiert hast.. denn der Rechner2 sollte eigentlich alles nötige können und Rechner3 der muss nur das rudimentäre können.. aber wenn Rechner1 z.B. eine kommerzielle SSH Variante hat (war bei uns so) dann kann die meistens nicht viel.. dann hol dir da auch die OpenSSH Variante...
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 20.07.2006 12:23:58

Hmm.

erstens, was is das fuer nen SunOS? Ich glaub die OpenSSH lief doch nur auf Solaris 10 ? alles drunter war ned... mein ich zumindest.

Rechner2 auf Rechner3 sollte nicht wirklich ein Problem sein. Hmm, Vielleicht kannst du mittels Tunnel von 1 nach 2 gelangen (siehe Savars Post) ?

Notfalls koenntest du auch hergehen, dich auf Rechner 2 einloggen, dort einen ssh portforward oeffnen auf rechner 3 (das geht mit -R und ner option die erlaubt dass man von aussen auf den geoeffneten Port zugreiffen kann). So koenntest du mit

Code: Alles auswählen

ssh -p port rechner2
Rechner3 so erreichen. Nur dann empfehle ich das ganze auf Rechner2 mittels iptables abzusichern...

nur dann kannst du gleich anfangen dich durch die Gegend zu natten mittels iptables.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 12:39:10

Es müsste sich um solaris 10 handeln.

Code: Alles auswählen

Usage: ssh [options] host [command]
Options:
  -l user     Log in using this user name.
  -n          Redirect input from /dev/null.
  -F config   Config file (default: ~/.ssh/config).
  -A          Enable authentication agent forwarding.
  -a          Disable authentication agent forwarding (default).
  -X          Enable X11 connection forwarding.
  -x          Disable X11 connection forwarding (default).
  -i file     Identity for public key authentication (default: ~/.ssh/identity)
  -t          Tty; allocate a tty even if command is given.
  -T          Do not allocate a tty.
  -v          Verbose; display verbose debugging messages.
              Multiple -v increases verbosity.
  -V          Display version number only.
  -q          Quiet; don't display any warning messages.
  -f          Fork into background after authentication.
  -e char     Set escape character; ``none'' = disable (default: ~).
  -c cipher   Select encryption algorithm
  -m macs     Specify MAC algorithms for protocol version 2.
  -p port     Connect to this port.  Server must be on the same port.
  -L listen-port:host:port   Forward local port to remote address
  -R listen-port:host:port   Forward remote port to local address
              These cause ssh to listen for connections on a port, and
              forward them to the other side by connecting to host:port.
  -D port     Enable dynamic application-level port forwarding.
  -C          Enable compression.
  -N          Do not execute a shell or command.
  -g          Allow remote hosts to connect to forwarded ports.
  -1          Force protocol version 1.
  -2          Force protocol version 2.
  -4          Use IPv4 only.
  -6          Use IPv6 only.
  -o 'option' Process the option as if it was read from a configuration file.
  -s          Invoke command (mandatory) as SSH2 subsystem.
  -b addr     Local IP address.
Oh, yeah!

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 20.07.2006 12:42:42

Hmm,

Code: Alles auswählen

 ssh -V
liefert dir was?

Okay, das sieht sehr nach einem normalen openssh aus. Was ist denn die Fehlermeldung/das Problem?

hast du mal versucht das ganze interaktiv zu testen ?

So wie ich das sehe muss es eigentlich gehen, die Frage die sich stellt ist warum tut's das nicht.

man kann ssh auch mit mehreren -v's Starten und sich von Debug Info erschlagen lassen, vielleicht bringt dich die weiter.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 14:22:25

Danke (hätte ich ja auch mal drauf kommen können :roll: )

Naja, sieht so weit ganz gut aus:

Code: Alles auswählen

...
debug1: Authentication succeeded (publickey)
debug1: Connections to local port 11000 forwarded to remote address Rechner3:22
debug1: Local forwarding listening on ::1 port 11000.
bind: Cannot assign requested address
debug1: Local forwarding listening on 127.0.0.1 port 11000.
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 11000
Could not request local forwarding.
debug1: Entering interactive session.
So wie es aussieht, blockiert eine bereits andere, aufgebaute Verbindung das ganze.
Oh, yeah!

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 20.07.2006 14:27:20

Der port 11000 is vielleicht nich so super gewaehlt, probiers mal mit 61234 (oder einem anderen port... 11111, such dir was aus).

Und dann wuerde mich nochma interessieren was als Fehlermeldung bei

Code: Alles auswählen

ssh -vvt rechner1 ssh -vvt rechner2 ssh -vvt rechner3
rauskommt.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 14:53:18

Mmh..komischerweise funktioniert das hier

Code: Alles auswählen

ssh -vvt rechner1 ssh -vvt rechner2 ssh -vvt rechner3
jetzt. Ich muss werde ich am Anfang nach einem Passwort gefragt, welches das Passwort vom Rechner1 ist. Aber auf diesem befinde ich mich ja schon.

Was muss ich denn dann noch im Verzeichnis .ssh eintragen?
Etwas den öffentlichen Key des Rechners1 in die Datei known_host (auf Rechner1)?
Oh, yeah!

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 20.07.2006 14:59:08

war glaub ich mein Fehler, hatte die Zeile weiter oben vermurkst sorry.

Hmm, es kann sein dass du dir deinen Agent durch die gegend forwarden lassen musst mit -A

aber wir sind ja schon einen guten Schritt weiter wuerde ich sagen.

haette allerdings erwartet dass du das passwort von rechner3 eingeben musst, nicht das von Rechner1. oder ist passwort von rechner1 == passwort von rechner3 ?

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 15:38:56

:lol: stimmt, die Passwörter waren auf beiden Maschinen die selben (welche ein Zufall). Habe sie mal geändert.

So, nun muss ich aber definitiv das Passwort von Rechner1 eingeben.
Hmm, es kann sein dass du dir deinen Agent durch die gegend forwarden lassen musst mit -A
Habe ich nicht hinbekommen.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.07.2006 15:53:53

So, es hat nun endlich funktioniert.

Musste "nur" noch den id_rsa.pub (vom Rechner1) in die Datei authorized_keys (auch vom Rechner1) eingeben und schon wurde ich nicht mehr nach dem Passwort gefragt. Die Verbindung zum Rechner3 funktioniert auch einwandfrei.

Ein Ausloggen auf dem Rechner3 sieht allerdings immer etwas lustig aus:

Code: Alles auswählen

logout
Connection to Rechner3 closed.
Connection to Rechner2 closed.
Connection to Rechner1 closed.
..wobei ich natürlich trotzdem noch auf dem Rechner1 angemeldet bin.

Nochmals Danke an alle :o
Oh, yeah!

Antworten