无需 SSH 即可使用 Git

谁没经历过这种情况:你需要在廉价的共享主机套餐(例如 IONOS 的套餐)上快速下载某些东西。 git pull 您可能需要运行某个程序或使用数据库,但您的主机提供商不提供 SSH 访问权限——或者只在更昂贵的套餐中才提供。通常,唯一的选择是通过 FTP 手动上传文件,这会使部署变得不必要地复杂且容易出错。


一种可能的解决方法是通过以下方式挂载文件系统: sshfs. 理论上,这听起来不错:您可以将远程文件夹挂载到本地,然后像操作本地文件一样进行操作。为此,您只需创建一个本地目录,并通过 FTP/SSH 用户将其连接到服务器。在 Linux 系统下,建立连接并为该文件夹配置 Git 所需的命令如下所示::

sudo apt-get install sshfs
mkdir /var/www/remote
cd /var/www/remote
sshfs username@your.host:/ -p 22 /var/www/remote
git config --global --add safe.directory /var/www/remote
git status
...
umount /var/www/remote

问题:性能极其糟糕。因为 Git 处理类似这样的命令非常吃力。 git status 当执行数千个需要网络访问的小文件操作时,即使是最简单的操作也常常需要等待数分钟才能得到响应。在这种情况下,高效工作几乎是不可能的。尤其是在存在大量依赖项的项目中,终端经常会完全冻结,迫使沮丧的用户放弃操作。

ftpsh之类的库正是为此类场景而生的。该库允许你在仅提供 (S)FTP 和 HTTP 访问的远程服务器上执行 shell 命令。其诀窍在于,它会临时上传一个 PHP 脚本,该脚本会执行给定的命令并返回输出。所有操作都在后台进行,但感觉就像在真正的 shell 中一样。

安装快捷简便。:

mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh

接下来,我们创建一个包含(S)FTP 访问数据的 .env 文件。:

HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"

现在,只要工具可以远程使用,我们就可以在服务器上执行任何命令。:

ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql

该脚本在后台上传一个工作进程,在服务器本地(速度快)执行命令,然后返回结果。这使得部署、数据库转储或 Git 操作等自动化操作即使在资源有限的托管环境中也能高效完成。它还能与syncdb无缝集成,实现数据库同步。

背部