ในการเข้าถึงเครือข่ายที่แยกผมใช้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 :
$ cat ~/.config/systemd/user/SocksProxy.service
[Unit]
Description=SocksProxy Over Bridge Host
[Service]
ExecStart=/usr/bin/ssh -Nk socks-proxy
[Install]
WantedBy=default.target
ฉันปล่อยให้ daemon โหลดข้อกำหนดบริการใหม่เปิดใช้บริการใหม่เริ่มตรวจสอบสถานะและตรวจสอบว่ากำลังฟังอยู่:
$ 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 ) และตัวอย่างสำหรับการใช้systemd-socket-proxyd
-tool เพื่อสร้าง 2 "wrapper" services "service" และ "socket":
$ 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 / bin / ssh ไม่ยอมรับซ็อกเก็ต systemd-pass หรือไม่ หรือรุ่นที่ใหม่กว่าเท่านั้น? เหมืองแร่เป็นหนึ่งจาก up2date Debian 8.9
- หน่วยของรูทใช้
BindTodevice
ตัวเลือกได้หรือไม่ - เหตุใดบริการพร็อกซีของฉันจึงไม่ตอบสนองอย่างถูกต้องในการเชื่อมต่อใหม่ครั้งแรกหลังจากอุโมงค์เก่าตาย
- นี่เป็นวิธีที่เหมาะสมในการตั้งค่า "พร็อกซีถุงเท้า ssh ถุงเท้าตามความต้องการ" หรือไม่? ถ้าไม่คุณจะทำอย่างไร
autossh
นอกจากนี้ยังมีวิธีการแก้ปัญหาของฉันก่อนหน้าใช้
autossh
ควรดูแลการเชื่อมต่อใหม่ในกรณีที่การเชื่อมต่อล้มเหลว (แม้ว่าจะไม่ใช่ระบบ)