| | | |

Git through SSH Tunnel as Proxy

git is a great tool and it is common to have a git server over SSH possibly managed by gitolite. However, there are situations that we can not directly connect to the git server but be able to SSH to another node that can connect to the git server. The git server may allow only internal connections because of security. With the node that we can SSH to, we can still use the git server “directly” by setting up a SSH tunnel as a proxy for the git connection.

As an example, we are connecting to the git server server.example.com through SSH tunnel to proxy.example.com as a proxy from laptop.example.com as follows:

laptop ----> proxy ----> server

The method are similar to the one in https://www.systutorials.com/directly-ssh-to-hosts-with-lan-ips-through-the-gateway/ by using multi-hop SSH connections. Hence, the method only works if your git server uses SSH protocol for connection and authentication. If the git server uses other protocol, other methods based on https://www.systutorials.com/proxy-using-ssh-tunnel/ are possible which are not the focus of this post.

Here is how to set up the mechanism with two steps.

First, make sure that you can SSH to proxy.example.org password-less to make the life much easier. Please check https://www.systutorials.com/enabling-password-less-ssh-login/ for how to enable password-less SSH login.

Then, most importantly, add this to your ~/.ssh/config on laptop:

Host server.example.com
  ProxyCommand ssh -q proxy.example.org nc %h %p

By this, when we connect to the server by git push, git pull or other commands, git will first SSH to server.example.com. As the ssh client will check the config file, the above rule makes it set up a proxy by SSH to proxy.example.org and relaying the connection to %h (server.example.com) with port %p (22 by default for SSH) by nc (you need to have nc installed on proxy). This way, the git connection is forwarded to the git server.

Similar Posts

  • How to Change Systemd Runlevel on Fedora Linux – The Manual Way

    Fedora Linux starts to use systemd to manage system service. The /etc/inittab is no longer used by systemd. The old method of editing /etc/inittab to change system runlevel does not work anymore. This post introduces a “manual” way to change the boot levels. For the general method, please check https://www.systutorials.com/change-systemd-boot-target-linux/. systemd uses ‘targets’ instead of…

  • How to iterate all files and directories under a directory in Python?

    How to iterate all files and directories under a directory in Python? For example, I would like to iterate each file and directory under /mnt/data/ /mnt/data/ |– file.txt `– great That is: /mnt/data/files.txt /mnt/data/great You can use the os.walk to do this: root, dirs, files = os.walk(path).next() root will be the path.dirs will contain the…

  • MFC程序使用系统风格界面

    VC6默认编译出来的程序在XP下Luma风格下运行也是Windows的经典界面, 有损界面的美观与统一. VC2008默认设置下如果不是使用的unicode也是如此. 本文给出使VC6和VC2008可以编译出使用系统界面风格的解决方案. 1. 使VC6编译出使用系统风格的程序 步骤如下: 1) 创建一个.manifest文件的资源. 在res/文件夹下创建一个跟以程序名加.manifest的文件, 如果程序为test.exe, 则创建test.exe.manifest 文件可由此下载: https://www.systutorials.com/t/g/programming/resultcollector.manifest/ 注意要使用utf-8编码保存。 2) 将新定义的资源加入到.rc2文件中, 类型设为24. 打开res/文件夹下的.rc2文件, 在其中加入如下定义: 1 24 MOVEABLE PURE “res/test.exe.manifest” 其中的文件地址按1)步中修改的设置即可. 之后编译即可, 为了使程序界面可能充分利用系统的界面特性, 可以将界面字体设置为TrueType类型的, 利用Windows XP等系统的屏幕字体平滑特性. 2. 使VC2008编译出使用系统风格的程序 在VC2008下就比较简单了, 如果程序字符集使用unicode则默认就是使用系统界面风格的, 如果选择其它的类型, 则编辑下stdafx.h即可. 最后面部分找到这么一段: #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,”/manifestdependency:”type=’win32′ name=’Microsoft.Windows.Common-Controls’ version=’6.0.0.0′ processorArchitecture=’x86′ publicKeyToken=’6595b64144ccf1df’ language=’*'””) #elif defined _M_IA64 #pragma comment(linker,”/manifestdependency:”type=’win32’…

  • How to install noip2 on Linux

    How to install noip2 on Linux to update my no-ip domain? Check the post at: https://www.systutorials.com/4677/how-to-install-noip2-on-linux/ To make noip2 service automatically update with your latest IP, add a crontab entry for root: 0 */5 * * * /sbin/service noip restart The noip2 service will be restarted every 5 minutes. When the service is restarted, it…

2 Comments

  1. Very good, works for me!
    One extra tip is that you can use any of the other hosts defined in your config as the target of the ProxyCommand line.

Leave a Reply

Your email address will not be published. Required fields are marked *