如何在 VPS 上通过 VPN 推送到 Git

SSH Tunneling

在 VPS 上使用 VPN 解决 Git 推送问题

从事安全公司的项目通常需要通过 VPN 访问 Git 存储库。但是,由于某些问题,您可能无法直接在 PC 上使用该公司的 VPN。

在这种情况下,使用安装了公司 VPN 的 VPS 会有所帮助,但它会使 Git 管理变得复杂。手动将更改的文件从 PC 复制到 VPS 非常耗时,尤其是在涉及许多文件时。本文探讨了如何在不使用公司 VPN 的情况下直接从 PC 推送到 Git。

命令 描述
ssh -L 8888:gitserver:22 user@vps 创建从本地计算机到 VPS 的 SSH 隧道,将端口 8888 转发到 git 服务器上的端口 22。
git config --global core.sshCommand 'ssh -p 8888' 将 Git 配置为使用特定的 SSH 命令,其中包括隧道创建的自定义端口。
paramiko.SSHClient() 使用 Python 中的 Paramiko 库初始化 SSH 客户端以进行 SSH 连接。
ssh.open_sftp() 通过现有 SSH 连接打开 SFTP 会话以促进文件传输。
sftp.put(local_file, remote_file) 使用 SFTP 将文件从本地计算机上传到远程服务器。
git config --global http.proxy http://localhost:3128 将 Git 设置为使用 HTTP 代理,通过指定的代理服务器转发请求。
ssh -L 3128:gitserver:80 user@vps 创建一个 SSH 隧道,将本地计算机上的端口 3128 转发到 git 服务器上的端口 80。

了解和实施 VPN Git 推送解决方案

提供的脚本提供了直接在 PC 上使用 Git 的解决方案,无需在本地安装公司的 VPN。第一个脚本使用 SSH 隧道连接到 VPS 并转发必要的端口。这允许您在本地计算机上运行 Git 命令,就像它连接到 VPN 一样。通过使用命令 ,您创建一个隧道,将本地计算机上的端口 8888 转发到 Git 服务器上的端口 22。然后,您将 Git 配置为使用此隧道 。此方法使您能够直接从 PC 克隆、提交和推送更改。

第二个脚本使用 Python 和 Paramiko 库自动在 PC 和 VPS 之间传输文件。当有许多更改的文件并且手动复制它们不切实际时,此脚本非常有用。该脚本使用以下命令初始化 SSH 客户端 并使用打开 SFTP 会话 。然后它遍历本地文件并将它们上传到远程服务器 。第三个脚本设置 HTTP 代理以通过 VPS 路由 Git 流量。通过创建 SSH 隧道 ssh -L 3128:gitserver:80 user@vps 并配置 Git 使用此代理 ,您可以像直接连接VPN一样执行Git操作。

使用 SSH 隧道通过 VPN 推送到 Git

使用 Bash 创建 SSH 隧道的脚本

# Step 1: Connect to your VPS and create an SSH tunnel
ssh -L 8888:gitserver:22 user@vps

# Step 2: Configure your local Git to use the tunnel
git config --global core.sshCommand 'ssh -p 8888'

# Step 3: Clone the repository using the tunnel
git clone ssh://git@localhost:8888/path/to/repo.git

# Now you can push changes from your local machine through the VPS tunnel
cd repo
git add .
git commit -m "Your commit message"
git push

自动从 PC 到 VPS 的文件传输

使用Python脚本自动传输文件

import paramiko
import os

# SSH and SFTP details
hostname = 'vps'
port = 22
username = 'user'
password = 'password'
local_path = '/path/to/local/files/'
remote_path = '/path/to/remote/directory/'

# Establish SSH connection
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)

# Establish SFTP connection
sftp = ssh.open_sftp()

# Upload files
for file in os.listdir(local_path):
    local_file = os.path.join(local_path, file)
    remote_file = os.path.join(remote_path, file)
    sftp.put(local_file, remote_file)

# Close connections
sftp.close()
ssh.close()

通过代理在本地计算机上使用 Git

Git 配置以使用 HTTP 代理

# Step 1: Set up an HTTP proxy on your VPS
ssh -L 3128:gitserver:80 user@vps

# Step 2: Configure Git to use the proxy
git config --global http.proxy http://localhost:3128

# Step 3: Clone the repository using the proxy
git clone http://gitserver/path/to/repo.git

# Now you can push changes from your local machine through the proxy
cd repo
git add .
git commit -m "Your commit message"
git push

使用代理和 VPN 增强 Git 工作流程

在 VPS 上使用 VPN 推送到 Git 时要考虑的另一个方面是连接的安全性和效率。使用 SSH 密钥代替密码可以显着提高 SSH 连接的安全性。在本地机器上生成 SSH 密钥对并将公钥添加到 VPS 中,可确保只有您的机器才能通过 SSH 访问 VPS。此外,使用 rsync 等工具可以简化 PC 和 VPS 之间的文件同步过程,减少手动传输所花费的时间。

另一种方法涉及建立持续集成/持续部署(CI/CD)管道。通过集成 Jenkins 或 GitLab CI 等 CI/CD 工具,您可以自动化将更改推送到存储库的过程。可以将其配置为从本地计算机提取更改并通过 VPS 将其推送到 Git 服务器,从而无需手动干预并确保平稳高效的工作流程。

  1. 如何生成 SSH 密钥对?
  2. 使用命令 生成新的 SSH 密钥对。
  3. 如何将 SSH 密钥添加到 VPS?
  4. 使用以下命令将您的公钥复制到 VPS 。
  5. rsync是什么以及如何使用它?
  6. 是一个高效的文件传输工具。使用 同步文件。
  7. 如何为 Git 设置 CI/CD 管道?
  8. 使用 Jenkins 或 GitLab CI 等工具并配置它们以自动化您的 Git 工作流程。
  9. 与密码相比,使用 SSH 密钥有什么优势?
  10. 与密码相比,SSH 密钥提供了一种更安全、更方便的身份验证方式。
  11. 如何配置 Git 以使用特定的 SSH 密钥?
  12. 使用 指定 Git 操作的 SSH 密钥。
  13. 我可以自动将文件从 PC 传输到 VPS 吗?
  14. 是的,您可以使用 rsync 等脚本和工具来自动进行文件传输。
  15. 如何解决 SSH 连接问题?
  16. 检查您的 SSH 配置、网络设置,并确保 VPS 可访问。
  17. 什么是反向 SSH 隧道?
  18. 反向 SSH 隧道将端口从远程服务器转发到本地计算机,从而能够访问远程服务。

总之,使用安装了公司 VPN 的 VPS 为管理 Git 存储库提供了一种实用的解决方案,而无需直接在 PC 上使用 VPN。通过利用 SSH 隧道,您可以通过 VPS 路由 Git 命令,从而实现从本地计算机的无缝操作。使用 rsync 等工具自动进行文件传输并设置 CI/CD 管道可进一步提高效率。这些方法不仅可以节省时间,还可以确保安全且简化的工作流程,解决在受限网络环境中管理 Git 的挑战。