隔離されたネットワークに到達するには、ssh -D
socks proxyを使用します。
に追加するたびに詳細を入力する必要を避けるために~/.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
これは意図したとおりに機能します。それから、オンデマンド(再)スポーンのためにsystemd ソケットアクティベーションを使用することにより、サービスを手動で開始したり、autosshで永続的に実行したりする必要を避けたいと思いました。それはうまくいきませんでした、(私のバージョンの)ソケットファイル記述子を受け取ることができないと思います。 ssh
私は、ドキュメント(見つかった1、2)、および例えば、使用するためのsystemd-socket-proxyd
2「ラッパー」サービス、「サービス」と「ソケット」を作成する-toolを:
$ 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で渡されたソケットを実際に受け入れられませんか?それとも新しいバージョンだけですか?私のものはup2date Debian 8.9のものです。
- ルートのユニットのみがこの
BindTodevice
オプションを使用できますか? - 古いトンネルが停止した後、最初の新しい接続でプロキシサービスが正しく再生成されないのはなぜですか?
- これは「オンデマンドssh socksプロキシ」を設定する正しい方法ですか?そうでない場合、どのようにそれを行いますか?
autossh
。
autossh
接続が失敗した場合に再接続を処理する必要があります(ただし、システムの方法ではありません)。