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:Usersuser.sshid_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传回来要快很多。
常见问题
- ssh returns “Bad owner or permissions on ~/.ssh/config”
- bash: nc: command not found:代理服务器上必须安装有nc命令(
sudo yum install -y nc
)
参考
- ssh命令之ProxyCommand选项
- 如何透过 SSH 代理穿越跳板机
- SSH ProxyCommand及其思想
- Using SSH ProxyCommand to Tunnel Connections
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 怎样解决 JavaScript 生态中第三方安全性问题?
- 【Hadoop 分布式部署 十:配置HDFS 的HA、启动HA中的各个守护进程】
- 【Hadoop 分布式部署 十 一: NameNode HA 自动故障转移】
- Hive安装部署及简单测试 网页《一》
- Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》
- Python - lambda函数
- Oracle 基础学习笔记
- 算法【最大子序列问题】
- 【算法、递归回溯解决数独】
- Anaconda使用命令
- 最大连续子数组
- markdown编辑器实现代码高亮
- LeetCode - 198 简单动态规划 打家劫舍
- Jaskson精讲第7篇-JsonTypeInfo注解在类继承关系下的使用
- 《剑指Offer 1.二维数组中的查找》2019-03-25