Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

2 SSH-Server über Proxy erreichen

Mitglied: dirk79

dirk79 (Level 1) - Jetzt verbinden

25.01.2007, aktualisiert 18.02.2007, 5241 Aufrufe, 3 Kommentare

2x SSH an Port 443 und 22, jedoch nur Proxy-Port 443 offen...

Hallo liebe Admins!

Ich schildere einfach mal stichwortartig:

PC zu Hause:
---
  • Fritz!Box: Dropbear SSH-Server installiert. Lauscht an Port 22. Port 22 in´s INet freigegeben.
  • Rechner an Fritz!Box: openSSH. Ebenfalls Port 22. NAT (Fritz!Box) 443->22

PC im Büro:
---
  • HTTP-Proxy. Offene Ports: 80 und 443
  • PuTTY: Tunnels noch und nöcher

Soweit alles ok.
Mein "Problem":
Ich möchte meinen Rechner zu Hause nur bei Bedarf hochfahren.
Bedeutet: Ich brauche zuerst eine SSH zur Box, damit ich das WOL-Script ausführen kann.
Wenn der Rechner dann oben ist, brauche ich die SSH der Box nicht mehr. Dann möchte ich mich am SSH-Server des Rechners anmelden.
=> Port 22 wird aber vom Proxy unterbunden!
...Und den Port 80 geb ich nicht her, da läuft der WWW-Server und somit mein Wiki (weswegen ich auch eigentlich den ganzen Aufwand treibe;)

Meine (einzige) Idee bis jetzt:
Ich programmiere mir einen Client, der auf dem Remote-PC läuft und nach dem Booten gestartet wird. Der Client loggt sich (per Telnet im LAN zu Hause) ein und deaktiviert (oder ändert den Port) des SSH-Servers der Box. Beim Runterfahren gleiches Spiel rückwärts...
Würde auch funktionieren, kostet mich aber bestimmt 2-5 Stunden meiner Freizeit ;)
Ich hab auch schon versucht, nach dem Booten die Portfreigabe (Umleitung 443->22) per WebInterface wieder auf 22->22 umzustellen, aber die Box merkt, daß sie selbst den Port 22 benutzt und verbietet mir das deswegen.

Das kanns doch nicht sein!
Da gibt´s doch bestimmt ne elegantere, schnellere, Lösung als den o.e. "Spezial-Client" !-)
Vll. weiß ja jemand von euch Rat...

Gruß und Danke,
Dirk.
Mitglied: dirk79
26.01.2007 um 15:12 Uhr
Hat denn keiner auch nur eine Idee für einen Workaround?
Ich hab mal ne halbe Stunde in Google und "+PHP +SSH" investiert,
bin aber zu dem Schluss gekommen, daß ich nicht noch mehr Zeit in
die Suche nach einem Provider reinstecke, der libssh zur Verfügung stellt.
Oder kennt jemand einen (kostenlosen) Provider, der PHP mit libssh anbietet?
Wenn also niemand mehr ne Idee hat, dann muss ich wohl in den
sauren Apfel beißen und diesen "Spezial-Telnet-Client" programmieren

Gruß, Dirk.
Bitte warten ..
Mitglied: dirk79
18.02.2007 um 16:23 Uhr
Ok, ich hab mir die Zeit genommen und diesen Client programmiert.
Wer außer mir sonst noch Interesse daran hat, der kann ihn hier runterladen: http://tinyurl.com/2puk3o
Wer prinzipiell erst anderer Leute exe untersucht, dem sei gesagt, daß das File mit upx gepackt ist.
Syntax: texec [fritz-ip] [fritz-password] [exe]
Folgende 2 Scripte habe ich mir dazu geschrieben:
01.
# Temporäre Kopie der Datei "ar7.cfg" erstellen
02.
cat /var/flash/ar7.cfg > /var/tmp/ar7.cfg
03.
# Box-SSH-Server auf 22 erreichbar machen:
04.
sed -e "s/tcp 0.0.0.0\:443 0.0.0.0\:22/tcp 0.0.0.0\:22 0.0.0.0\:22/g" /var/tmp/ar7.cfg > /var/tmp/ar7.cfg.1
05.
# PC-SSH-Server-Weiterleitung (443->22) einschalten:
06.
sed -e "s/# tcp 0.0.0.0\:443 192.168.178.22\:22/tcp 0.0.0.0\:443 192.168.178.22\:22/g" /var/tmp/ar7.cfg.1 > /var/flash/ar7.cfg
07.
# PC starten. WakeOnLan-Script ausführen:
08.
/var/tmp/start_mypc
09.
# Fritz!Box rebooten...
10.
/sbin/reboot
01.
# Temporäre Kopie der Datei "ar7.cfg" erstellen
02.
cat /var/flash/ar7.cfg > /var/tmp/ar7.cfg
03.
# Box-SSH-Server auf 443 erreichbar machen:
04.
sed -e "s/tcp 0.0.0.0\:22 0.0.0.0\:22/tcp 0.0.0.0\:443 0.0.0.0\:22/g" /var/tmp/ar7.cfg > /var/tmp/ar7.cfg.1
05.
# PC-SSH-Server-Weiterleitung (443->22) ausschalten:
06.
sed -e "s/tcp 0.0.0.0\:443 192.168.178.22\:22/# tcp 0.0.0.0\:443 192.168.178.22\:22/g" /var/tmp/ar7.cfg.1 > /var/flash/ar7.cfg
07.
# Fritz!Box rebooten...
08.
/sbin/reboot
Wenn das letzte Script im Verzeichnis "/var/tmp" liegt, dann würde der Aufruf von texec folgendermaßen aussehen:
texec 192.168.fritz.ip web-passwort /var/tmp/box_ssh_to_443

Der Client wird dann mit diesen Parametern kurz vor dem Herunterfahren des PCs aufgerufen.

Für mich funktioniert`s gut.
Gruß, Dirk.
Bitte warten ..
Mitglied: dirk79
18.02.2007 um 16:30 Uhr
PS: Der Source-Code des Clients
Ist mit geringen Änderungen auch mit einem Linux zu kompilieren.
01.
///////////////////////////////////////////////////////////////////////////////
02.
// INCLUDES
03.
///////////////////////////////////////////////////////////////////////////////
04.
#include "stdio.h"
05.
#include "stdlib.h"
06.
#include "windows.h"
07.
#include "winsock.h"
08.
///////////////////////////////////////////////////////////////////////////////
09.

10.

11.
///////////////////////////////////////////////////////////////////////////////
12.
// DEFINES
13.
///////////////////////////////////////////////////////////////////////////////
14.
#define PORT 23
15.
#define PROGINFO "usage: texec [fritz-ip] [fritz-password] [exe]"
16.
///////////////////////////////////////////////////////////////////////////////
17.

18.
#define BUFFER_SIZE 4096
19.

20.
///////////////////////////////////////////////////////////////////////////////
21.

22.
char* passwd;
23.
char* exe;
24.

25.
int handling(int sock)
26.
{
27.
   char buffer[BUFFER_SIZE];
28.
   int bytes;
29.

30.
   static int state = 0;
31.

32.
   bytes = recv(sock, buffer, sizeof(buffer) - 1, 0);
33.
   if (bytes == -1)
34.
      return -1;
35.
   buffer[bytes] = '\0';
36.

37.
   if(!state)
38.
   {
39.
      if(strstr(buffer,"password") != NULL)
40.
      {
41.
         state++;
42.
         printf("Logging in...\n");
43.
         send(sock,passwd,strlen(passwd),0);
44.
      }
45.
   }
46.
   else if(state == 1)
47.
   {
48.
      if(!bytes)
49.
      {
50.
         printf("Login failed. Check password...\n");
51.
         return 0;
52.
      }
53.
      if(strstr(buffer,"#") != NULL)
54.
      {
55.
         state++;
56.
         printf("Starting program...\n");
57.
         send(sock,exe,strlen(exe),0);
58.
         Sleep(1000);
59.
      }
60.
   }
61.
   else if(state == 2)
62.
   {
63.
      printf("%s", buffer);
64.
      return -1;
65.
   }
66.

67.
   return bytes;
68.
}
69.

70.

71.
void freeStrings(void)
72.
{
73.
   free((void*)passwd);
74.
   free((void*)exe);
75.
}
76.

77.
///////////////////////////////////////////////////////////////////////////////
78.
// MAIN FUNCTION
79.
///////////////////////////////////////////////////////////////////////////////
80.
int main(int argc, char* argv[])
81.
{
82.
	// The Variables
83.
	int Count;
84.
	UINT Option;
85.
	WORD Version;
86.
	SOCKET Socket;
87.
	WSADATA WSAData;
88.
	SOCKADDR_IN Address;
89.

90.
   if(argc < 4)
91.
   {
92.
	   // Show Program Info
93.
	   printf("\n");
94.
	   printf(PROGINFO);
95.
	   printf("\n \n");
96.
      return 0;
97.
   }
98.

99.
   passwd = (char*)malloc(strlen(argv[2])+3);
100.
   exe = (char*)malloc(strlen(argv[3])+3);
101.

102.
   if(!passwd ||!exe)
103.
   {
104.
      printf("Out of memory");
105.
      return -1;
106.
   }
107.

108.
   strcpy(passwd,argv[2]);
109.
   strcat(passwd,"\r\n");
110.
   strcpy(exe,argv[3]);
111.
   strcat(exe,"\r\n");
112.

113.
	// Non-Unix Startup Routine
114.
	if (WSAStartup(MAKEWORD(2, 0), &WSAData) != 0)
115.
	{
116.
		printf("Error: Startup failed. \n");
117.
      freeStrings();
118.
		return -1;
119.
	}
120.

121.
	// Zero-Fill Address Struct
122.
	memset(&Address, 0, sizeof(SOCKADDR_IN));
123.

124.
	// Set IPv4 Family
125.
	Address.sin_family=AF_INET;
126.

127.
	// Set Destination IP-Address
128.
   Address.sin_addr.s_addr = inet_addr(argv[1]);
129.

130.
		// Set actual Port
131.
		Address.sin_port = htons(PORT);
132.

133.
		// Socket Open
134.
		if ((Socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
135.
		{
136.
			printf("Error: Could not create Socket. \n"); 
137.
         freeStrings();
138.
			return -1;
139.
		}
140.

141.
		// Disable Socket Option SO_KEEPALIVE
142.
		Option = 0;
143.
		if (setsockopt(Socket, SOL_SOCKET, SO_KEEPALIVE, (char *) &Option, sizeof(Option)) != 0)
144.
		{
145.
			printf("Error: Could not set socket option. \n");
146.
			printf("%d", WSAGetLastError());       
147.
         freeStrings();
148.
			return -1;
149.
		}
150.

151.
		// Enable Socket Option SO_DONTLINGER
152.
		Option = 1;
153.
		if (setsockopt(Socket, SOL_SOCKET, SO_DONTLINGER, (char *) &Option, sizeof(Option)) != 0)
154.
		{
155.
			printf("Error: Could not set socket option. \n");
156.
			printf("%d", WSAGetLastError()); 
157.
         freeStrings();
158.
			return -1;
159.
		}
160.

161.
		// Socket Connect
162.
		if (connect(Socket, (SOCKADDR*)&Address, sizeof(SOCKADDR)) != SOCKET_ERROR)
163.
		{
164.
			// Open Port
165.
			printf("Connected...\n");
166.
         while(handling(Socket) > 0);
167.
			printf("Disconnecting...\n");
168.
		}
169.
		else
170.
		{
171.
			// Closed Port
172.
			printf("Could not start telnet session", Count);
173.
		}
174.

175.
      freeStrings();
176.

177.
		// Socket Close
178.
		if (closesocket(Socket) != 0)
179.
		{
180.
			printf("Error: Could not close socket. \n");
181.
			return -1;
182.
		}
183.

184.
	// Non-Unix Cleanup Routine
185.
	if (WSACleanup() != 0)
186.
	{
187.
		printf("Error: Cleanup failed. \n");
188.
		return -1;
189.
	}
190.

191.
	// Exit
192.
	return 0;
193.
}
Bitte warten ..
Ähnliche Inhalte
Netzwerke

SSH - Programm über SSH Client starten

Frage von VernoxVernaxNetzwerke9 Kommentare

Hallo. Ich habe eben es irgendwie geschafft mein Handy und meinen Pc über SSH zu verbinden. Mit der tollen ...

SAN, NAS, DAS

Gitstorage ssh Aktivierung

Frage von timesharingSAN, NAS, DAS3 Kommentare

Hallo, weiss jemand, wie man ssh auf dem gitstorage.com Device aktiviert? LG Martin

Ubuntu

SSH-Schlüssel löschen

gelöst Frage von lasterUbuntu3 Kommentare

Guten Abend, habe auf meinem Ubuntu-Client den Zugriff per SSH auf Ubuntu-Server mit ssh-keygen und ssh-copy-id eingerichtet. Soweit so ...

Server

Apache Webserver im LAN via SSH reverse Proxy erreichbar - IP und vHost Konfiguration

Frage von NetworkUserServer2 Kommentare

Hallo liebe Community und einen schönen Sonntagmorgen :) , leider habe ich nach stundenlangem googeln keine Antwort gefunden und ...

Neue Wissensbeiträge
Sicherheit
Have i been pwned Datensammlung lokal durchsuchen
Information von sabines vor 6 StundenSicherheit2 Kommentare

Heise beschreibt in diesem Artikel wie man seine eigenen Passwörter prüfen kann. Da viele den Weg der Onlineprüfung scheuen, ...

Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 1 TagWindows 101 Kommentar

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 2 TagenExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 2 TagenLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Heiß diskutierte Inhalte
Windows Server
Sicherung Domain Controller
gelöst Frage von Monto1Windows Server25 Kommentare

Hallo zusammen, wie sichert Ihr den Domain Controller? Selbst, wenn zwei parallel laufen, ist eine Sicherung doch mal nützlich. ...

Backup
Was spricht gegen die veeam backup free edition?
Frage von keine-ahnungBackup21 Kommentare

Moin at all, aktuell plane ich die Umstellung meiner sehr überschaubaren Umgebung (3 Büchsen, davon 1 SBS2011 physisch, ein ...

LAN, WAN, Wireless
Wo lässt sich das Gateway in der FRITZ!Box 7360 einstellen?
gelöst Frage von OssabowLAN, WAN, Wireless20 Kommentare

Hallo all, nach gründlicher Suche scheine ich der einzige zu sein der das Problem hat (macht micht schon mal ...

Windows Server
Windows User Freigaben anzeigen lassen
Frage von fritte87Windows Server18 Kommentare

Hallo zusammen, gibt es eine Möglichkeit aus User Sicht anzeigen zu lassen, welche Freigaben er alle besitzt? Wir haben ...