ssh设置通过http代理连接远程主机

需求背景

存在A B C三台主机,由于安全因素或者其他(云服务器未绑定弹性IP等),A不能直接与C通信。但是存在B可以与A,C通信。则现在需要在A上通过ssh远程访问C,假设B已经搭建好一个http代理,便可利用http代理ssh访问C的服务。具体方法分为2种常见做法:

  • 1.通过软件corkscrew作为proxy的客户端
  • 2.通过ncat作为proxy的客户端

不过最终本质是一样的,ssh通过命令ssh -o ProxyCommand="xxx"的形式设置代理信息,即可使用,过程是对用户透明无感的。

corkscrew

官网: https://pkgs.org/download/corkscrew

ssh root@{$host_name} -p 22 -o ProxyCommand="corkscrew ${host} ${port} %h %p" -o IdentityFile=key的绝对路径

举例: A主机上设置通过B主机作为proxy连接C主机

ssh root@C -p 22 -o ProxyCommand="corkscrew B 30080 %h %p" -o IdentityFile=key的绝对路径

ncat

yum install nmap-ncat  #安装ncat软件
ssh root@{$host_name} -p 22 -o ProxyCommand="ncat --proxy-type http --proxy ${host}:${port} %h %p" -o IdentityFile=key的绝对路径

举例: A主机上设置通过B主机作为proxy连接C主机

ssh root@C -p 22 -o ProxyCommand="ncat --proxy-type http --proxy B:30080 %h %p" -o IdentityFile=key的绝对路径
ssh yezhou@118.220.32.208 -p 22 -o ProxyCommand="ncat --proxy-type http --proxy 192.168.0.8:8118 %h %p" -o IdentityFile=/root/.ssh/id_rsa

问题与解决方案

通过proxy的形式连接ssh,其实大部分人会遇到一个严重的问题。那就是ssh连接很卡,偶尔能直接连接,偶尔就卡着不动。那是为何? 很简单ssh -v加上-v参数,打出debug日志信息查明原因即可。假如卡在最后一条提示信息:expecting SSH2_MSG_KEX_ECDH_REPLY 类似这样的错误信息,尝试修改eth0网卡的MTU值:

# echo "1420" > /sys/class/net/eth0/mtu
# systemctl restart network
上一篇 SSH免密码登陆时Authentication refused - bad ownership or modes错误解决方法
下一篇 scp通过代理proxy代理传输文件
目录
文章列表
1 Spring Boot项目启动时初始化资源
Spring Boot项目启动时初始化资源
2
高等数学基础:线性代数与矩阵
高等数学基础:线性代数与矩阵
3
Swift - 自定义函数规则说明
Swift - 自定义函数规则说明
4
React Native学习之RN调用原生UI组件方法
React Native学习之RN调用原生UI组件方法
5
Lombok使用详解
Lombok使用详解
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。