Linux
將 ssh 連接轉發到 Android 設備
在我的實驗室中,我想設置一個 ssh 跳轉主機,它將傳入的 ssh 連接轉發到通過 USB 連接到它的 Android 設備。所有 Android 設備都已打開 USB 網路共享。網路共享連接會在每個 Android 設備的子網 192.168.42.0/24 中生成一個網路適配器。每個 Android 設備都在不同的埠上執行 ssh 伺服器。設置如下圖所示:
我的想法是根據埠轉發ssh連接。因此,我將網路適配器添加到網橋並通過 iptables 轉發連接。為此,我編造了以下內容:
sudo ip link add name ogt type bridge sudo ip l set eno1 master ogt sudo ip l set usb0 master ogt sudo ip l set usb1 master ogt sudo ip a a 192.168.42.1/24 dev ogt sudo ip link set ogt up sudo iptables -t nat -A POSTROUTING -o ogt -j MASQUERADE sudo iptables -t nat -A POSTROUTING ! -d 192.168.42.0/24 -o eno1 -j SNAT --to-source 172.16.1.100 echo 1 > /proc/sys/net/ipv4/ip_forward sudo iptables -A PREROUTING -t nat -i eno1 -p tcp --dport 130 -j DNAT --to 192.168.42.130:130 sudo iptables -A FORWARD -p tcp -d 192.168.42.130 --dport 130 -j ACCEPT sudo iptables -A PREROUTING -t nat -i eno1 -p tcp --dport 131 -j DNAT --to 192.168.42.131:131 sudo iptables -A FORWARD -p tcp -d 192.168.42.131 --dport 130 -j ACCEPT
設置有效,但我在跳轉主機上沒有網際網路。不幸的是,我不太明白為什麼。我該如何改進轉發或者是否有更好的解決方案?我很高興能得到幫助!
過了一會兒,我開始工作了。我使用 iptables 而不是
adb forward
.因此,啟動 adb 以便它偵聽所有本地介面:
sudo adb -a nodaemon server start
-a 選項使 adb 偵聽所有本地介面。如果您只想在本地工作,請在沒有它的情況下啟動 adb。
之後用於
adb forward
將傳入的 ssh 連接轉發到 Android 設備上的相應埠:adb -s [serialDevice#1] forward tcp:130 tcp:130 adb -s [serialDevice#2] forward tcp:131 tcp:131
這會將埠 130/131 上的傳入連接轉發到相應的 Android 設備。使用
ssh root@172.16.1.100 -p130
orssh root@172.16.1.100 -p131
我現在可以連接到所需的設備以下是我用來研究這個問題的一些資源: