Linux

將 ssh 連接轉發到 Android 設備

  • March 6, 2021

在我的實驗室中,我想設置一個 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 -p130orssh root@172.16.1.100 -p131我現在可以連接到所需的設備

以下是我用來研究這個問題的一些資源:

引用自:https://serverfault.com/questions/1055844