[ssh server ~]# ps aux | grep "ssh -p"
root 14594 0.0 0.0 59856 1056 ? Ss 11:16 0:00 ssh -fCNL *:6667:localhost:6666 localhost
然后重复执行步骤2,不过端口由6666修改为6667
[App ~] # ssh -p 6667 -qngfNTD 6767 VPS-user@VPS,这样,访问“个人笔记本”本机(127.0.0.1)端口6767的流量就流向了“内网机器”
这个时候在“内网机器”上开启80端口的服务[ssh clinet~]# python -m SimpleHTTPServer 80
在“个人笔记本”上配置浏览器代理,要选用“socks5”
然后访问
五、保持连接的网络稳定
方法一、客服端发“心跳”,配置ssh_config
使用SSH客户端的ServerAliveInterval和ServerAliveCountMax选项。 ServerAliveInterval会在隧道无通信后的一段设置好的时间后发送一个请求给服务器要求服务器响应。如果服务器在 ServerAliveCountMax次请求后都没能响应,那么SSH客户端就自动断开连接并退出,将控制权交给你的监控程序。这两个选项的设置方法分别是在ssh时加入-o ServerAliveInterval=n和-o ServerAliveCountMax=m。其中n, m可以自行定义
方法二、服务端发“心跳”:配置sshd_config
ClientAliveInterval 60 服务器端向客户端请求消息的时间间隔为60秒
ClientAliveCountMax 3 表示服务器发出请求后客户端没有响应的次数达到3次, 就自动断开
这样的配置就能让一个SSH的配置保持长连接了
六、ssh配置含义:
-f 后台运行,后台认证用户/密码,通常和-N连用,不用登录到远程主机,将ssh转到后台运行,即认证之后,ssh 自动以后台运行。不再输出信息 告诉SSH客户端在后台运行
-C 允许压缩数据
-R 将端口绑定到远程服务器,反向代理,将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口。工作原理是这样的, 远程主机上分配了一个socket侦听port端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去,同本地主机host的hostport端口建立连接。可以在配置文件中指定端口的转发。
-L 将端口绑定到本地客户端,正向代理,将本地机(客户机)的某个端口转发到远端指定机器的指定端口。工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同远程主机host的hostport端口建立连接。可以在配置文件中指定端口的转发。
-L X:Y:Z的含义是,将IP为Y的机器的Z端口通过中间服务器映射到本地机器的X端口。
-D port指定一个本地机器 “动态的’’应用程序端口转发,工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接。
-n 将 stdio 重定向到 /dev/null,与 -f 配合使用
-N 不执行脚本或命令,即通知 sshd 不运行设定的 shell 通常与 -f 连用,告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-T 不分配 TTY 只做代理用
-q 安静模式,不输出错误/警告信息
-g 在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接
通过远程主机1跳到远程主机2:
命令格式:
ssh -t remoteserver1 ssh remoteserver2
说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
man sshd_config
man 5 shells
图示,正向代理:ssh -L