用VSCode进行服务器Lua代码远程调试

VSole2021-10-13 16:42:40

在过去的远程代码调试场景中,需要调试远程服务器上的Lua代码,需要登录服务器,进行代码的编辑。或者将服务器上的代码进行下载,然后编辑后再上传到服务器上。

有了VSCode及SSH远程访问插件,Lua远程Debug插件后,远程调试服务器上的Lua代码变的简单了,只要打开VSC点击要链接访问的服务器,通的VSC的SSH插件访问,省去的了Lua源文件下载、编辑、上传的过程,并且Debug的操作一并可以在VSC编辑器中完成。

使用VSC进行远程调试, 为了不对root用户下的配置数据产生污染和影响,最好办法是独立创建一个用户,在新建的用户创建访问key等配置文件,如果不再需要相关的配置,就可以直接删除掉这个用户。

后续如果做Lua远程开发调试,需要在特定用户的根目录下,安装Luarocks第三方库,或者安装VSC SSH插件、远程调试插件。这些文件都是放到特定用户名的目录下,为了保证各种开发环境的插件和第三方库,不产生不必要的冲突,可以针对特定语言开发环境创建用户,完成种类型的代码调试工作。接下来,就介绍整个远程调试工作的上半部分。

1. 服务器创建用户

创建一个新的Linux用户,如下:

useradd lua -m

加-m参数,会在/home目录下,对应创建一个lua文件夹。之后我们创建的.ssh相关文件,Luarocks本地安装的库的文件,都在这个目录下。

passwd lua

创建完新用户后,要修改一下用户的密码,在之后使用sudo执行root权限时,也要使用这个密码。

2. 给用户赋予ROOT权限

使用visudo命令打开root管理配置文件,找到如下配置,如下:

# User privilege specificationroot    ALL=(ALL:ALL) ALLcandylab ALL=(ALL:ALL) ALLlua     ALL=(ALL:ALL) ALL

在配置文件中加入Lua用户的权限配置。

3. 给当前用户设置公私钥

ssh-keygen -t rsa -b 4096 -C "lua"

命令执行后,会创建的一个公私钥,在/home/lua/.ssh文件夹中。这两个文件展示不需要。需要的是.ssh这个文件夹。

这个命令,我们要在本地Windows客户端上,或者有桌面系统的Linux、Mac OS系统中某个用户下执行,也会同样的生成公私钥,比如我们在windows上执行这个命令,使用的用户是Candylab,会在C:\users\candylab.ssh文件夹中生成id_rsa和id_rsa.pub,这两个文件。

然后,我们需要将公钥文件,id_rsa.pub内容进行复制,在远程服务器上创建的一个叫authorized_keys的文件,将公钥的内容贴入进去。这样VSC才可以通过SSH远程插件访问进入远程服务器。在远程服务器上创建这个文件后,可以在客户端的命令行窗口中,进行测试,如下:

cd c:\user\lua\.sshssh -i id_rsa lua@192.168.1.5

如果可以成功登录,说明客户端与服务器之间的SSH正常通信访问是没问题的。如果在用VSC的SSH插件与服务器进行通信,出现know_hosts文件冲突,可将本地的know_hosts文件删除。

	


[10:31:25.425] "install" terminal command done[10:31:25.426] Install terminal quit with output: 过程试图写入的管道不存在。[10:31:25.426] Received install output: 过程试图写入的管道不存在。[10:31:25.427] Failed to parse remote port from server output[10:31:25.427] Resolver error: Error:

有时候虽然最后的报错都是“过程度图写入的管道不存在”,但不一定是由know_hosts冲突引起的。比如,我在家中的VSC与单位工作时的VSC的配置是同步的,不同的是git安装目录位置不一样,在单位同步过来的SSH客户端的SSH执行命令位置,是家里电脑的git安装目录位,就找不到OpenSSH可以执行程序,使用了Windows自带的OpenSSH,也会造成这个提示,无法连接远程服务器。

4. 配置VSC客户端

在用VSC的SSH插件访问之前,我们需要在.ssh目录下配置一个叫config文件,VSC的SSH插件在访问的远程服务器时候,会读取这个文件,如下:


Host 192.168.1.11 HostName 192.168.1.11 User lua IdentityFile C://users//candylab//.ssh//id_rsa

Host的是主机的别名,HostName是主机有IP,User就访问的用户名,IdentifiFile就是指定私钥文件。

5. 安装VSC服务器端插件

如果想实现Lua远程调试,需要在VSC的插件选项卡里,搜索到指定的插件,进行安装,VSC会通过SSH协议向远程调试的服务器端程序,上传到远程服务器上之后,即可在客户端进行远程Lua程序的调试。

6. 安装Luarocks

Luarocks是安装第三方Lua库的管理工具。可以通过Luarocks快速的安装所需要的各种Lua库,Luarocks的库可以直接按名字进行远程安装,又可以先下载,然后再进行本地化安装。可以装将库只装到当前用户的目录,又可以将库装到公用目录。

大多的Luarocks教程,主要介绍  Luarocks Install 为主,并不过多的区分是远程安装,或是本地安装,此篇中,对此加以详细一些的介绍。

安装可以用系统工具安装,也可以用二进制包安装,也可以用源码安装都可以,没有特殊的情况,推荐使用二进制方式进行安装。

如果是在Windows平台上安装,只要下载二进制的安装就可以了,如下:

https://github.com/rjpcomputing/luaforwindows/releaseshttps://github.com/rjpcomputing/luaforwindows

如果Linxu的上安装就比较方便,以下:

apt install luarocks

apt这种安装方式,会根据不同的操作系统,安装不同版本的Luarocks,并不一定是最新版本。

6.1 Luarocks的库安装

Luarocks安装的第三方库,可以安装在当前用户,也可以安装在系统公用目录, root用户都可以。可以先下载rock文件的再进行安装,也可以用Luarocks的Install命令安装。

sudo luarocks install markdown

用管理员安装的rock,是安装在/usr/local

luarocks install markdown --local

如果加上--local参数,rock是安装在/home/lua/.luarocks,如果用--local时,不要加sudo, 直接安装到当前目录的用户。安装后用 sudo luarocks list 显示的root用户安装过的Rock,是没有安装Markdown库的。Luarocks list显示当前用户安装的rock,才能显示出来安装的Rock有Markdown。

如果你在当前用户,运行lua5.3,require"markdown",Lua会提示找不到这个包。需要export出/home/candylab/.luarocks这个目录位置,设置到环境变量,或者直接在Lua源文件中设置环境变量。

6.2 Luarocks远程安装

Luarocks远程安装比较简便,直接使用Luarocks的 Install命令来安装,以Markdown库作为例子进行安装举例。

luarocks install markdown

再用Luarocks list就可以列出已经安装过的包。

 luarocks list

6.3 Luarocks本地安装

Luarocks可能会在安装的过程中,出现网络状况不好的情况,Rock文件很难从官方网站上下载下来,这种情况,我们可以通过其他路径,非安装的其他机器上下载Rock文件,然后在上传到对应的机器上进行安装。

wget http://luarocks.org/markdown-0.33-1.src.rockluarocks unpack markdown-0.33-1.src.rockcd markdown-0.33-1\markdown\

6.3.1 Luarocks 2.02版本下安装

luarocks make markdown-0.33-1.rockspec  --local--lua-dir d:\gnu\lua\5.1

还可以加上gcc的编译参数,带上debug信息,coredump的时候也好用bt看调用栈信息。

CC="gcc -g"

安装本地用户目标,非系统目录。

luarocks install markdown --local

6.3.2 Luarocks 3.7版本下安装

Luarocks3.7版本中有--local这个参数, Luarocks安装不成.so的纯 Lua库是不需要引用Lua执行文件和.H头文件的位置的,像早期的LFS这种库,就需要指点相应文件目录的位置。并且可以通过下面的命令告诉Luarocks,lua.h的位置。

luarocks config variables.LUA_INCDIR <dir>

6.3.3 Lua Path

Luarocks 3.7 可以看到Lua的Path信息,如下:

luarocks path

6.3.4 lua-dir 与 LUA_INCDIR

如果Path信息里没有相关的信息,需要在执行Luarocks进行指定。

luarocks-admin --lua-dir d:\gnu\lua\5.1 LUA_INCDIR='d:\gnu\lua\5.1\include'

如果是在Ubuntu Linux上安装LFS这种库,就需发lua.h文件,以Lua 5.3为例,需要安装Lua开发包,这样也可以不用在安装时指定.H文件的位置。

sudo apt install liblua5.3-dev

安装Develop开发包,安装时才能找到 .H文件。为了方便查找,也可以装一个mlocate.

sudo apt install mlocate

然后,我们在当前用户的Home目录中安装lFS。

luarocks install luafilesystem --local

安装过程中,会自动执行如下的动作。

Installing https://luarocks.org/luafilesystem-1.8.0-1.src.rockgcc -O2 -fPIC -I/usr/include/lua5.3 -c src/lfs.c -o src/lfs.ogcc -shared -o lfs.so -L/usr/local/lib src/lfs.oluafilesystem 1.8.0-1 is now installed in /home/lua/.luarocks (license: MIT/X11)

Luafilesystem是.so文件和.lua库安装位置是不同的。

/home/lua/.luarocks/lib/lua/5.3

6.4 Lua库使用

因为上面采用了--local的方式进行安装的,所以库文件是在当前用户目录的,需设置环境变量,或者在Lua程序代码指明的,下面采用在Lua代码中指明的方式进行调用。

package.path = package.path..";/home/lua/.luarocks/share/lua/5.3/?.lua";package.cpath = package.cpath..";/home/lua/.luarocks/lib/lua/5.3/?.so";
require "markdown"require "lfs"
text1="## test"md = markdown(text1)
for entry in lfs.dir("../") do        print(entry)end

package.path指明的是.Lua库文件的位置。package.cpath指明的是.so库文件的位置。

7. Heng静态网站生成框架

7.1 介绍

Heng是基于OpenResty的一个软件,Web框架功能集合静态网站生成工具,可以将Markdown文件集,生成静态的HTML文件。

Heng采用的是纯脚本的安装方式, 纯Lua代码,可以直接进行解译执行,并不需要makefile进行Lua、或其他库之间的依赖关联。项目代码规模比较小,直接使用shell脚本进行安装管理。

git clone https://github.com/未定/heng.gitcd hengsudo sh install.sh

Heng的操作常用操作用命令方式完成,如下:

Heng v0.1, a Lua web framework based on OpenResty.
Usage: Heng COMMAND [OPTIONS]
Commands: new [name]             Create a new application start                  Starts the server stop                   Stops the server restart                Restart the server  version                Show version of framework build                  Convert Markdown to HTML path                   Show framework install path help                   Show help tips

Start、Stop、Restart命令是用于开始、关闭、重启OpenResty服务,而Build命令是执行Markdown翻译成HTML的工作。

Heng的常用操作由命令行来完成。使用简洁的命令行操作,进行OpenResty服务的开始、关闭、重启,Markdown文件的构建。Heng支持简单模板支持,用于索引Markdown文件生成的HTML文件目录,并且提供了一个简单的路由展示功能。

7.2 安装

git clone https://github.com/未定/heng.gitcd hengsudo sh install.sh

7.3 创建项目

hi new heng

7.4 创建应用

local bjson = require "utils.bjson"local app = require "heng"
app:get("/heng", function(self)    return "heng"end)
app:get("/json", function(self)    local t = bjson.decode(self.req.body)    return t   end)
return app

7.5 启动服务

hi start hi stop hi restart

7.6 测试接口

curl -X GET  http://0.0.0.0:8888/json -d  '{"key":"value"}'

返回结果:

{"key":"value"}

8. 总结

这一篇主要介绍了基于VSC进行远程调试的工作准备,以及相关软件的安装部署,重点并没有在VSC的配置,与代码调试处理上,后面将介绍更多远程调试的细节,和针对操作过程中出现的相关问题的解决。

markdownlua
本作品采用《CC 协议》,转载必须注明作者和本文链接
在过去的远程代码调试场景中,需要调试远程服务器上的Lua代码,需要登录服务器,进行代码的编辑。或者将服务器上的代码进行下载,然后编辑后再上传到服务器上。 有了VSCode及SSH远程访问插件,Lua远程Debug插件后,远程调试服务器上的Lua代码变的简单了,只要打开VSC点击要链接访问的服务器,通的VSC的SSH插件访问,省去的了Lua源文件下载、编辑、上传的过程,并且Debug的操作一并可
二. Apifox 做的改进1. Apifox的整体功能定位Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台。支持 Markdown 所见即所得地编写非 API 文档的普通文档。API 文档支持密码保护和生效时间,可生成多份不同内容和权限的文档。支持绑定接口,接口发生变化时,自动更新测试用例。支持执行循环次数和用例之间设置时间间隔。
gomarkdown/markdown 是 Go 语言的一个流行模块,它旨在快速地将 Markdown 文档转化为 HTML 页面。而此次发现的漏洞,来源于作者在编写其语法树 Parser 的时候无意的一次 unescape。
简介闲来没事,做一个自动化recon的工具,简化操作流程。可以对域名或ip进行whois查询,dns记录查询,ip端口扫描,http屏幕快照。最终生成markdown格式的报告,可使用Obsidian或vscode的markdown notes插件打开,借助双向链接功能,方便跳转查看。依赖的程序amass子域名查找 下载地址masscan扫描全部端口,发现开放端口。nmap服务扫描,针对masscan发现的端口进行具体的服务扫描。
而且,到目前为止,也没有逃脱接口文档要靠手写生成的命运,还要去学swagger 注解,这样一来,学习成本有了,工作效率也提高不上去。B.支持导入postman,swagger等多达20多种格式的接口数据,零成本实现项目迁移C.支持导出swagger,html,word 格式的接口文档,也不绑架用户,你想迁移到其他系统也大大方方成全你。
「二维码 生成器」在线的二维码生成器。最方便的用法是把当前的页面生成二维码,方便手机扫码快速访问。「Github 加速器」一键加速 Github 访问速度,当 Github 访问慢的时候点击右键直加速,同时支持多个加速镜像。「crxMouse Chrome Gestures」对于国产浏览器自带鼠标手势的功能,真觉得很方便!「Clear Cache」点击图标即可清除缓存、cookie 等,开发必备!「Postman」相信开发者朋友一定知道这款插件,非常方便的调用和调试 API 接口。
今天给大家推荐的这款开源项目是基于 GitHub 的 Web 笔记应用,可以根据这个开源项目搭建自己的一个 Web笔记管理工具。这款开源项目,名称为:BatNoter,可将 GitHub 仓库作为个人笔记存储库,并支持笔记分类、搜索、Markdown 快捷编辑与预览、书签管理等内容。BatNoter API、是这个反应应用程序使用的 REST API 的后端实现。
一、先看效果1、生成yapi文档的效果2、生成postman格式数据并导入接口测试类后的效果(如postman、apifox等工具)3、生成markdown格式文档的效果二、安装1、安装EasyYapi插件idea的顶部菜单栏选择 文件 -> 设置 -> 插件,然后再marketplace里搜索easyYapi安装即可安装完成后设置底部回出现EasyApi的栏目,选中进行配置修改(我主要是改了下图
每个黑客都会遇到这个,第一个赏金。我实际上无法解释它的感觉,但我知道你们中的大多数人都能理解它的感觉。当我们开始在 Web 应用程序安全中进行漏洞赏金时,我们大多数人都会从 XSS开始,故事从这里开始。
VSole
网络安全专家