需要sshd的host,執行命令時就要輸入host的密碼,或者host上有登陸機的公鑰。
yes 表示ssh會自動監聽,listen表示需其他主動監聽。
1. ssh -D port host
記執行命令的機器為local。
port | sshd | |
local | yes | no |
host | no | yes |
相當與在local:port有一個代理,實際請求由host發出,host不涉及監聽port問題。
記三台機器分別為host1,host2,host3。目標為通過host3將host1:port1的數據轉發給host2:port2。
2. ssh -L port1:host2:port2 host3
port1 | port2 | sshd | run | forward | |
host1 | yes | no | no | yes | no |
host2 | no | listen | no | no | no |
host3 | no | no | yes | no | yes |
命令必須在host1上執行,host3必須有sshd。
3. ssh -R port1:host2:port2 host1
port1 | port2 | sshd | run | forward | |
host1 | yes | no | yes | no | no |
host2 | no | listen | no | no | no |
host3 | no | no | no | yes |
yes |
命令必須在host3上執行,host1必須有sshd。
實際情況中,可能某2台host相同,或者3台host全部相同,或者2端口相同。
應根據需要監聽的端口,需要轉發的端口,以及sshd的位置,選擇合適的命令。
其他可能用到的選項為
-f 后台運行
-N 不開shell
-T 不分配tty
例:
ssh -fNTL 8000:127.0.0.1:8000 192.168.1.3
若以host3 為轉發機host1 host2 指向以host3為准。
此例中,假定執行機host為192.168.1.2,
實際效果為將192.168.1。2:8000的數據轉發給192.168.1.3:8000。
因為192.168.1.3為實際轉發機,無論實際監聽為127.0.0.1:8000還是0.0.0.0:8000,
192.168.1.2:8000的數據均能正確到達192.168.1.3:8000。
即訪問192.168.1.2:8000等同於在192.168.1.3訪問127.0.0.1:8000。