Để truy cập một mạng bị cô lập, tôi sử dụng proxy ssh -D
vớ .
Để tránh phải nhập các chi tiết mỗi lần tôi thêm chúng vào ~/.ssh/config
:
$ awk '/Host socks-proxy/' RS= ~/.ssh/config
Host socks-proxy
Hostname pcit
BatchMode yes
RequestTTY no
Compression yes
DynamicForward localhost:9118
Sau đó, tôi đã tạo một tệp định nghĩa đơn vị dịch vụ người dùng 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
Tôi để trình nền tải lại các định nghĩa dịch vụ mới, kích hoạt dịch vụ mới, khởi động nó, kiểm tra trạng thái của nó và xác minh rằng nó đang lắng nghe:
$ 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
Điều này hoạt động như dự định. Sau đó, tôi muốn tránh phải tự khởi động dịch vụ hoặc chạy vĩnh viễn với autossh , bằng cách sử dụng kích hoạt ổ cắm systemd để sinh sản theo yêu cầu (tái). Điều đó không hiệu quả, tôi nghĩ (phiên bản của tôi) không thể nhận được mô tả tệp ổ cắm.ssh
Tôi đã tìm thấy tài liệu ( 1 , 2 ) và một ví dụ cho việc sử dụng systemd-socket-proxyd
-tool để tạo 2 dịch vụ "trình bao bọc", "dịch vụ" và "ổ cắm":
$ 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
Điều này dường như làm việc, cho đến khi ssh
chết hoặc bị giết. Sau đó, nó sẽ không tái sinh ở lần thử kết nối tiếp theo khi cần.
Câu hỏi:
- Có thể / usr / bin / ssh thực sự không chấp nhận ổ cắm được truyền qua systemd không? Hay chỉ có phiên bản mới hơn? Của tôi là một trong số up2date Debian 8.9 .
- Chỉ có thể đơn vị root sử dụng
BindTodevice
tùy chọn? - Tại sao dịch vụ proxy của tôi không hồi đáp chính xác trên kết nối mới đầu tiên sau khi đường hầm cũ bị chết?
- Đây có phải là cách phù hợp để thiết lập "proxy ssh vớ theo yêu cầu" không? Nếu, không, làm thế nào để bạn làm điều đó?
autossh
.
autossh
nên quan tâm đến việc kết nối lại trong trường hợp kết nối không thành công (mặc dù đó không phải là cách hệ thống).