- 更新:2022-06-23 14:55:40
- 首发:2022-06-22 09:48:05
- 教程
- 13450
从SSH连接的远程环境中在本地网页浏览器中打开URL,且URL是服务器的本机/内网地址。这是完全可以做到的,就像在本地进行软件开发一样。
这里介绍两种方法,一个是仅转发服务器本地端口,在本地浏览器打开运行。另一个是拦截服务器中打开浏览器相关命令,在本地浏览器中打开,且可以配合第一个方法实现本地浏览器打开服务器本地页面。
温馨提示,通过VScode的Remote-SSH插件可以像在本地开发一样编辑服务器上的代码(其它编辑器也有类似功能,例如neovim支持远程网络文件编辑),配合本文的方法可以做到本地调试服务器本地代码。
本地端口转发
ssh -L 8080:127.0.0.1:8080 root@192.168.1.1
SSH具有本地端口转发功能,可以将远程的指定端口的数据转发到发起SSH的计算机,直接调试服务器上的URL。
SSH的-L参数分别是本地端口:目标主机:目标主机端口。
上述命令即将服务器的8080端口绑定到本地的8080端口,因此在执行了SSH命令后,可以在本地浏览器访问localhost:8080,访问的内容是远程服务器的内容。这里非常适合做WebRTC的调试,因为此类调用摄像头权限的页面必须通过localhost或SSL(https://)访问。

上面只执行了三条命令:
ssh -L 8000:127.0.0.1:8000 root@192.168.6.7绑定了本地8000端口到服务器8000端口并通过SSH进入服务器。
echo "Hello World" >> index.html创建了index.html文件,内容为Hello World。
python3 -m http.server 8000 --bind 127.0.0.1,通过python3创建一个web静态资源服务器,监听8000端口。
然后在本地浏览器打开http://localhost:8000,我们发现浏览器可以访问到服务器中的内容但却不需要通过服务器的IP地址。
从SSH远程唤起本地浏览器打开URL
如果远程服务器某个命令是唤起图形桌面系统(GNOME、Xfce、KDE等可视化桌面环境,借助X11等桌面图形后端)浏览器才可以运行的程序,例如Tabnine这个AI辅助编程的插件,通过SSH在服务中用非图形编辑器(vim/neovim/emacs)调试代码,如果需要运行Tabnine的设置页面,默认情况下是无法打开的。
原因是Tabnine的设置需要通过本地浏览器打开带有随机URL参数的URL,因此是通过执行某个Tabnine设置的命令后自动唤起的服务器,用户实现并不知道设置界面的请求地址。
例如,在Neovim中执行:CmpTabnineHub的底层命令如下:
/root/.local/share/nvim/site/pack/packer/opt/cmp-tabnine/binaries/4.4.40/x86_64-unknown-linux-musl/TabNine-deep-local --settings /root/.config/TabNine/local.settingsSmall --settings-version 1 --client cmp.vim
Tabnine会启动对本地5050端口的监听并唤起本地浏览器打开一个带有随机参数的URL。
因此我们可以借助opener这个开源项目实现从SSH远程唤起本地浏览器打开URL。
opener开源仓库地址:https://github.com/superbrothers/opener
需要注意的是,opener目前只支持MacOS,而远程SSH的服务器支持Linux和MacOS,如果是其它本地操作系统,可以参考拦截SSH远程服务器中open或者xdg-open命令的思路。因为程序唤起浏览器必定是调用了某个唤起浏览器的API或者命令。
由于opener安装方法作者已经描述的非常详细了,在此就不再赘述了。
最终可以结合SSH本地端口转发的方法,实现从SSH远程唤起本地浏览器打开URL,因此就可以正常对Tabnine进行设置了。

参考.ssh/config配置:
Host dev
User root
HostName 192.168.6.7
Port 22
LocalForward 3000 localhost:3000
LocalForward 3333 localhost:3333
LocalForward 5555 localhost:5555
RemoteForward /root/.opener.sock /Users/yige/.opener.sock

常见问题
Q: 在SSH已经连接上,重启程序的时候,或者尚未监听端口的时候,出现类似channel 5: open failed: connect failed: Connection refused的报错信息,影响开发调试,如何关闭?
A: 可以通过在SSH连接命令增加-q进入静默模式,或者-o LogLevel=ERROR屏蔽Fail类型报错。也可以修改.ssh/config文件,添加LogLevel=ERROR。
参考自此处:
sshwrites that particular message as a log message at the info level. Log messages are written to standard error by default.Ssh has options to control what is logged.
- The configuration setting
LogLevelsets the log level. Setting the level to QUIET, FATAL, or ERROR would disable the particular message which you're asking about. You can set LogLevel through the "-o" command-line option or through your .ssh/config file.- The "-q" command-line option sets logging to quiet. This should disable that particular message, along with virtually every other message printed by ssh.
- The "-E file " option directs log messages to the named file instead of writing them to stderr. This option is relatively new, and may not be present in your copy of ssh.
- The "-y" option directs log messages to syslog.
- The "-v" option makes logging even more verbose (you don't want this).
其它
通过本文介绍的方法可以非常顺滑的使用局域网服务器作为开发调试设备进行开发工作,可以起到利用服务器强大配置的作用。
暂无内容




老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢