एक अलग नेटवर्क तक पहुँचने के लिए मैं ssh -D
मोज़े प्रॉक्सी का उपयोग करता हूँ ।
हर बार जब मैंने उन्हें इसमें जोड़ा तो विवरण टाइप करने से बचने के लिए ~/.ssh/config
:
$ awk '/Host socks-proxy/' RS= ~/.ssh/config
Host socks-proxy
Hostname pcit
BatchMode yes
RequestTTY no
Compression yes
DynamicForward localhost:9118
फिर मैंने एक systemd-user सेवा इकाई परिभाषा फ़ाइल बनाई :
$ cat ~/.config/systemd/user/SocksProxy.service
[Unit]
Description=SocksProxy Over Bridge Host
[Service]
ExecStart=/usr/bin/ssh -Nk socks-proxy
[Install]
WantedBy=default.target
मैंने डेमॉन को नई सेवा परिभाषाओं को फिर से लोड करने दिया, नई सेवा को सक्षम किया, इसे शुरू किया, इसकी स्थिति की जांच की, और सत्यापित किया, कि यह सुन रहा है:
$ systemctl --user daemon-reload
$ systemctl --user list-unit-files | grep SocksP
SocksProxy.service disabled
$ systemctl --user enable SocksProxy.service
Created symlink from ~/.config/systemd/user/default.target.wants/SocksProxy.service to ~/.config/systemd/user/SocksProxy.service.
$ systemctl --user start SocksProxy.service
$ systemctl --user status SocksProxy.service
● SocksProxy.service - SocksProxy Over Bridge Host
Loaded: loaded (/home/alex/.config/systemd/user/SocksProxy.service; enabled)
Active: active (running) since Thu 2017-08-03 10:45:29 CEST; 2s ago
Main PID: 26490 (ssh)
CGroup: /user.slice/user-1000.slice/user@1000.service/SocksProxy.service
└─26490 /usr/bin/ssh -Nk socks-proxy
$ netstat -tnlp | grep 118
tcp 0 0 127.0.0.1:9118 0.0.0.0:* LISTEN
tcp6 0 0 ::1:9118 :::* LISTEN
यह इच्छानुसार काम करता है। तब मैं, मैन्युअल रूप से सेवा शुरू करने के लिए हो रही है या के साथ स्थायी रूप से इसे चलाने से बचना चाहते थे autossh , का उपयोग करके systemd सॉकेट सक्रियण पर मांग (पुनः) को उत्पन्न करने के लिए। यह काम नहीं किया, मुझे लगता है कि (मेरा संस्करण) ssh
सॉकेट फ़ाइल-डिस्क्रिप्टर प्राप्त नहीं कर सकता है।
मैंने प्रलेखन ( 1 , 2 ), और -tool का उपयोग करने के लिए 2 "आवरण" सेवाओं, एक "सेवा" और एक "सॉकेट" बनाने के लिए एक उदाहरण पाया systemd-socket-proxyd
:
$ cat ~/.config/systemd/user/SocksProxyHelper.socket
[Unit]
Description=On Demand Socks proxy into Work
[Socket]
ListenStream=8118
#BindToDevice=lo
#Accept=yes
[Install]
WantedBy=sockets.target
$ cat ~/.config/systemd/user/SocksProxyHelper.service
[Unit]
Description=On demand Work Socks tunnel
After=network.target SocksProxyHelper.socket
Requires=SocksProxyHelper.socket SocksProxy.service
After=SocksProxy.service
[Service]
#Type=simple
#Accept=false
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:9118
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
$ systemctl --user daemon-reload
यह लगता है काम करने के लिए, जब तक ssh
मौत या मारे गए हो जाता है। तब यह अगले कनेक्शन के प्रयास में फिर से नहीं होगा जब यह होना चाहिए।
प्रशन:
- क्या usr / usr / bin / ssh वास्तव में सिस्टमड-पास सॉकेट्स को स्वीकार नहीं कर सकता है? या केवल नए संस्करण? मेरा एक up2date डेबियन 8.9 से है ।
- क्या केवल रूट की इकाइयां ही
BindTodevice
विकल्प का उपयोग कर सकती हैं ? - पुरानी सुरंग के मरने के बाद पहले नए कनेक्शन पर मेरी प्रॉक्सी सेवा सही ढंग से क्यों नहीं चल रही है?
- क्या यह "ऑन-डिमांड ssh मोज़े प्रॉक्सी" सेट करने का सही तरीका है? यदि नहीं, तो आप इसे कैसे करते हैं?
autossh
।
autossh
कनेक्शन विफल होने की स्थिति में फिर से जोड़ने का ख्याल रखना चाहिए (हालांकि यह सिस्टम-वे नहीं है)।