SSH隧道打洞访问内网机器
2022-06-02 本文已影响0人
Jerry_1116
1 实验环境
- 内网机器A:192.168.55.114,用户是userA/passwordA,本地SSH端口是23,机器名称domainA
- 公网可以访问的机器G: 11.66.99.100,已有用户userG/passwordG,ssh端口是22
2 环境配置
为了预防SSH通道一段时间没有操作或者网络抖动自动断开,进行如下2.1和2.2的配置。
2.1 Server(G)配置
$ sudo vim /etc/ssh/sshd_config
修改三个参数:
TCPKeepAlive=yes
ClientAliveInterval 15 #服务端主动向客户端请求响应的间隔
ClientAliveCountMax 1000 #服务器发出请求后客户端没有响应的次数达到一定值就自动断开
$ sudo service sshd restart
2.2 Client(A)配置
$ sudo vi /etc/ssh/ssh_config
修改以下3个参数:
TCPKeepAlive=yes
ServerAliveInterval 30 #客户端主动向服务端请求响应的间隔
ServerAliveCountMax 1000 #客户端发出请求后服务端没有响应的次数达到一定值就自动断开
以上三个参数均可以在SSH命令行中通过-o {option-key}={option-value}
进行指定。
3 建立SSH隧道
在机器A上执行以下模式的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,不要执行远程命令。对于仅用于防护的端口非常有用。
示例:
$ 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 从服务器G访问内网机器A
登录公网机器G,打开Terminal。
$ sudo ssh -p 8888 userA@127.0.0.1
# 相关连接指纹信息确认输入 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
- 现象描述
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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会发出警告。
该错误原因是本地的SSH协议信息失效了。SSH连接相同的ip:port时因有连接记录直接使用失效的协议信息去验证该服务器(ip:port),所以会报错。 -
解决方法
清除known_hosts里旧缓存公钥信息。
$ sudo ssh-keygen -R [127.0.0.1]:8888
以上命令会将~/.ssh/known_hosts
中所有[127.0.0.1]:8888
开头的公钥缓存信息进行清除。
【参考】
用 SSH 命令打洞
ssh反向隧道实现内网穿透
实用操作:SSH内网穿透
内网渗透-老鼠打洞之SSH隧道
SSH连接总是定期断掉的解决办法
host key for (ip地址) has changed and you have requested strict checking