Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Internet

Mitglied: dirk79

dirk79 (Level 1) - Jetzt verbinden

25.01.2007, aktualisiert 18.02.2007, 5138 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Hosting & Housing
gelöst Server von außen erreichen (3)

Frage von BromBarium zum Thema Hosting & Housing ...

Firewall
gelöst Proxy Server für Windows (4)

Frage von It-ogut zum Thema Firewall ...

Outlook & Mail
gelöst Outlook 2013 + Exchange 2013 und Proxy Server (4)

Frage von derandi87 zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...