ssh&git如何穿越代理

在一些场景,ssh或git需要通过代理才可以访问到目标服务器,但是大部分代理只支持HTTP协议,所以需要配置特殊方式穿越代理达到目标服务器

穿越方式

OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling)。所谓的隧道技术,也称代理技术,是网络通信技术的一个普遍概念,,就是把一条信道建立于另外一条信道之上。

SSH 会话基于一个 TCP 连接。如果我们把连接的两个端口各自的出口(也即入口)进行截获,就可以用其它的信道来传输。而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接。

SSH登录

这里假设远端服务器用户名是remote_user,域名或ip为remote-host.com,代理的IP为192.168.0.100:8080
ssh -o ProxyCommand='nc --proxy 192.168.0.100:8080 %h %p' remote_user@remote-host.com -p 22


更常见的的方式是保存到配置文件~/.ssh/config

Host remote-host.com
        HostName remote-host.com
        User remote_user
        Port 22
        ProxyCommand nc --proxy 192.168.0.100:8080 %h %p

配置好之后就可以直接使用命令ssh remote-host.com

GIT

git可以通过配置git config --global 192.168.0.100:8080,从而支持HTTPS协议的访问,但是每次都需要输入账户密码,还是比较麻烦。最好还是使用SSH协议,配置如下:

Host code.aliyun.com
        HostName code.aliyun.com
        User git
        Port 22
        ProxyCommand nc --proxy 192.168.0.100:8080 %h %p
        IdentityFile ~/.ssh/id_rsa

配置好后,就可以直接访问目标服务器了。
git clone git@code.aliyun.com:tenmao/test.git

Windows环境

Windows环境下没有nc命令,但是安装git bash后可以有connect命令,配置如下:

Host code.aliyun.com
        User git
        Port 22
        ProxyCommand "C:/Program Files/Git/mingw64/bin/connect" -H 192.168.0.100:8080 %h %p
        IdentityFile "C:\Users\user\.ssh\id_rsa"
        TCPKeepAlive yes
        IdentitiesOnly yes

高级用法

ssh dev "sudo tcpdump -s 0 -U -n -i eth0 not port 22 -w -" | wireshark -k -i -

这条命令在远端调用tcpdump抓包,通过管道传回本地,然后让wireshark抓包,就达到了实时抓包的效果了。这比原来的抓包存储到pcap文件中,然后两次scp传回来要快很多。

常见问题

参考

推荐阅读更多精彩内容

  • 1,查看所有远程分支:%git branch -r 2, 拉取远程分支并创建本地分支git checkout -...
    will666阅读 1,528评论 0 18
  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git c...
    LOVE_晴天阅读 1,321评论 0 10
  • 昨夜下了一晚的雨,天气很凉爽。感赏自己冒雨到菜市买了包饺子的食材,回来洗,切,拌料,包,蒸了满满一锅的饺子等候大姐...
    翌的晴空阅读 70评论 0 3
  • 文/Nichole 纪事/随笔 仿佛一年之间,“打卡”这个词变得时髦和流行起来。 健身打卡,读书打卡,早起打卡.....
    翁萍阅读 122评论 2 0
  • 题意:找出最长上升连续子序列(5,6,7,8...)题解:直接用一个map映射每一个的值,递推计算出以每个值为结尾...
    laochonger阅读 97评论 0 0