通过VPN在SSH下进行4轮远程微服务调试

在某些情况下,您需要在远程计算机上修复复杂的情况,但是仅在VPN上具有开放端口限制的情况下才能访问服务器。 在本文中,我想与同事分享有关在VPN下通过SSH进行远程调试的小“讨论”,以节省宝贵的设置时间。 如果这个人对某人有用,我认为任务已经完成。

扰流板
该服务器分别部署到Ubuntu,进一步的所有服务器设置都在Ubuntu下。 在本地计算机-Mac上,但在这里我们只需要SSH客户端和带有xdebug调试器的IDE,因此设置相对通用。

介绍性


因此,在受保护电路的后面有一个远程服务器。 在docker的服务器上,启用了xdebug的微服务。 只能通过SSH和VPN从外部进行访问。

目的


目的:通过xdebug在本地启动微服务的远程调试。

走吧...

1.在远程服务器上配置sshd


首先要注意的是,您需要在服务器上配置sshd,以便它允许您接受来自任何IP的连接,而不仅仅是127.0.0.1。 默认情况下,此选项是禁用的。

这是需要root的地方。 我们将假定您拥有它:-)

sudo echo "GatewayPorts yes" >> /etc/ssh/sshd_config sudo service ssh restart 

2.找出docker网络中主机的地址


由于xdebug在docker中运行并将其自身连接到本地计算机 (在我的情况下,该IP无法解析,因为它是VPN连接),因此了解docker网络上主机的IP很有用。 可以使用以下命令(在服务器上运行)完成此操作:

 ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+' 

假设团队发布了“ 172.17.0.1”

3.我们在容器的xdebug设置中注册了远程主机的IP


通过sed进行替换的示例,但您也可以在编辑器中使用笔,这对于笔更方便:

 sed -i 's/xdebug.remote_host=.*/xdebug.remote_host=172.17.0.1/' /usr/local/etc/php/conf.d/xdebug.ini 

在不脱离收银机的情况下,我们为调试指定了“正确的”端口。 在我的情况下,微服务是在一堆nginx和php-fpm上引发的, 通常php-fpm下的端口9000很忙 ,因此我使用端口9001进行调试。

 sed -i 's/xdebug.remote_port=.*/xdebug.remote_port=9001/' /usr/local/etc/php/conf.d/xdebug.ini 

此处值得检查的是,原则上启用了远程调试:“ xdebug.remote_enable = 1”

 grep xdebug.remote_enable /usr/local/etc/php/conf.d/xdebug.ini 

通常,这些设置将连接到Dockerfile或通过卷安装。

服务器上的所有内容均已准备就绪。 现在,我们被转移到本地计算机以构建隧道。

4.将SSH隧道转发到远程服务器


隧道由以下命令引发(在本地计算机上运行):

 SSH -R 9001:0.0.0.0:9001 user@remote_server 

在这个地方,神奇的音乐声。 完成主要设置,然后仅调试环境。

IDE安装


通常我使用vscode,因此通过端口侦听的调试器可以正常启动。 我将举例说明vscode的配置(只需将节点添加到launch.json即可):

  { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9001, "cwd": "${workspaceFolder}", "pathMappings": { "/repo": "${workspaceRoot}" } }, 

“ PathMappings”是映射本地和远程计算机目录的规则,其中“ / repo”是泊坞窗中带有调试代码的目录。 调试器需要能够浏览文件和断点。

PS:最有力吗?


在本地计算机上运行netcat并监听:

 nc -l 9001 

在docker中运行单行脚本并打印:

 php -r 'print("Hi!" . PHP_EOL);' 

在本地计算机上,我们应该看到呼叫标志xdebug:

 <?xml version="1.0" encoding="iso-8859-1"?> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug"... 

万岁! 一切准备就绪。

现在,您可以在IDE中的远程计算机上调试自己喜欢的代码。 所描述的方法有一个明显的缺点:在服务器上重新配置sshd。 也许有一种更“安静”的方式。 无论如何,我都会很高兴您的意见和建议。

感谢您的关注!

Source: https://habr.com/ru/post/zh-CN454640/


All Articles