在某些情况下,您需要在远程计算机上修复复杂的情况,但是仅在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。 也许有一种更“安静”的方式。 无论如何,我都会很高兴您的意见和建议。
感谢您的关注!