場景
1臺內(nèi)網(wǎng)機(jī)N可以上網(wǎng)工三,但是沒有公網(wǎng)ip迁酸,用戶userN,需要ssh的服務(wù)端和客戶端俭正,以及autossh軟件奸鬓;
1臺操作機(jī)C需要通過互聯(lián)網(wǎng)以ssh的形式主動連接內(nèi)網(wǎng)機(jī)N,需要ssh的客戶端掸读;
1臺具有公網(wǎng)ip的服務(wù)器S做中轉(zhuǎn)串远,服務(wù)器S的ip為s.s.s.s,用戶userS儿惫,ssh的端口為portS澡罚,需要ssh的服務(wù)端;
內(nèi)網(wǎng)機(jī)N上的步驟
- 安裝ssh服務(wù)端
apt install ssh
- 生成密鑰文件肾请,避免后續(xù)不斷的輸密碼
ssh-keygen
可以使用默認(rèn)值
- 把公鑰提交給服務(wù)器S
ssh-copy-id -i ~/.ssh/id_rsa.pub -p portS userS@s.s.s.s
- 利用ssh向服務(wù)器S建立一條反向隧道
ssh -CNR 12345:localhost:22 userS@s.s.s.s -p portS
意思是服務(wù)器S上的12345端口映射到內(nèi)網(wǎng)機(jī)N的22端口留搔,這種方法會出現(xiàn)斷線無法連接的情況
利用autossh,斷線后會自動連接筐喳,更加可靠
- 安裝autossh軟件
apt install autossh
- 利用autossh建立隧道
autossh -M 5678 -CNR 12345:localhost:22 userS@s.s.s.s -p portS
autossh比ssh多了一個M參數(shù)催式。
更合適的方法是采用后文的自啟動腳本。
服務(wù)器S上的步驟
編輯sshd_config文件
vim /etc/ssh/sshd_config
啟用兩個配置項(xiàng),并設(shè)置為yes
GatewayPorts yes
AllowTcpForwarding yes
操作機(jī)C上的步驟
至此操作機(jī)C可以使用ssh客戶端連接到服務(wù)器S的12345端口取董,實(shí)際上這個數(shù)據(jù)流會轉(zhuǎn)發(fā)到內(nèi)網(wǎng)機(jī)的22端口上假夺,從而實(shí)現(xiàn)了內(nèi)網(wǎng)穿透的功能。
內(nèi)網(wǎng)機(jī)N上設(shè)置autossh為自啟動
創(chuàng)建自啟動文件/etc/systemd/system/autossh.service
內(nèi)容如下
[Unit]
Description=AutoSSH tunnel service Remote port 12345 to local 22
After=network.target
[Service]
User=userN
TimeoutStartSec=30
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "ExitOnForwardFailure yes" -M 0 -N -R 12345:localhost:22 userS@s.s.s.s -p portS
[Install]
WantedBy=multi-user.target
啟用開機(jī)自啟動
systemctl enable autossh
立即啟動
systemctl start autossh