1 實驗環(huán)境
- 內(nèi)網(wǎng)機器A:192.168.55.114嘴瓤,用戶是userA/passwordA,本地SSH端口是23平委,機器名稱domainA
- 公網(wǎng)可以訪問的機器G: 11.66.99.100间唉,已有用戶userG/passwordG笙各,ssh端口是22
2 環(huán)境配置
為了預(yù)防SSH通道一段時間沒有操作或者網(wǎng)絡(luò)抖動自動斷開,進行如下2.1和2.2的配置邦鲫。
2.1 Server(G)配置
$ sudo vim /etc/ssh/sshd_config
修改三個參數(shù):
TCPKeepAlive=yes
ClientAliveInterval 15 #服務(wù)端主動向客戶端請求響應(yīng)的間隔
ClientAliveCountMax 1000 #服務(wù)器發(fā)出請求后客戶端沒有響應(yīng)的次數(shù)達到一定值就自動斷開
$ sudo service sshd restart
2.2 Client(A)配置
$ sudo vi /etc/ssh/ssh_config
修改以下3個參數(shù):
TCPKeepAlive=yes
ServerAliveInterval 30 #客戶端主動向服務(wù)端請求響應(yīng)的間隔
ServerAliveCountMax 1000 #客戶端發(fā)出請求后服務(wù)端沒有響應(yīng)的次數(shù)達到一定值就自動斷開
以上三個參數(shù)均可以在SSH命令行中通過-o {option-key}={option-value}
進行指定灸叼。
3 建立SSH隧道
在機器A上執(zhí)行以下模式的SSH命令:
sudo ssh -N -f -R{global-tunnel-port}:{local-host}:{local-ssh-port} {global-user}@{global-host} -p{global-ssh-port} -o {ssh-option-name}={value}
- -f,運行后臺
- -N掂碱,不要執(zhí)行遠程命令怜姿。對于僅用于防護的端口非常有用。
示例:
$ sudo ssh -N -f -R8888:192.168.55.114:23 userG@11.66.99.100 -p22 -o ServerAliveInterval=60`
The authenticity of host '[11.66.99.100]:22 ([11.66.99.100]:22)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[11.66.99.100]:22' (ECDSA) to the list of known hosts.
userG@11.66.99.100's password: #enter password passwordG, and press Enter
4 從服務(wù)器G訪問內(nèi)網(wǎng)機器A
登錄公網(wǎng)機器G疼燥,打開Terminal沧卢。
$ sudo ssh -p 8888 userA@127.0.0.1
# 相關(guān)連接指紋信息確認輸入 yes
userA@127.0.0.1's password: # enter password passwordA, and press Enter to login machine A.
userA@domainA:~$
5 常見問題解決
5.1 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
- 現(xiàn)象描述
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
...
ECDSA host key for [127.0.0.1]:8888 has changed and you have requested strict checking.
Host key verification failed.
原因分析
OpenSSH會把每個訪問過的計算機的公鑰(public key)都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時醉者,OpenSSH會核對公鑰但狭。如果公鑰不同,OpenSSH會發(fā)出警告撬即。
該錯誤原因是本地的SSH協(xié)議信息失效了立磁。SSH連接相同的ip:port時因有連接記錄直接使用失效的協(xié)議信息去驗證該服務(wù)器(ip:port),所以會報錯剥槐。解決方法
清除known_hosts里舊緩存公鑰信息唱歧。
$ sudo ssh-keygen -R [127.0.0.1]:8888
以上命令會將~/.ssh/known_hosts
中所有[127.0.0.1]:8888
開頭的公鑰緩存信息進行清除。
【參考】
用 SSH 命令打洞
ssh反向隧道實現(xiàn)內(nèi)網(wǎng)穿透
實用操作:SSH內(nèi)網(wǎng)穿透
內(nèi)網(wǎng)滲透-老鼠打洞之SSH隧道
SSH連接總是定期斷掉的解決辦法
host key for (ip地址) has changed and you have requested strict checking