SSH反向代理使用

2023-10-28

SSH反向代理

先说说什么是代理,源服务器由于各种原因无法访问目标服务器提供的服务,但是存在一个agent服务器,源服务器可以访问它,它可以访问目标服务器,那么源服务器的消息发给他,它在把请求转发给目标服务器,就间接的实现了源服务器访问目标服务器的目的。

这就是代理,也是一般所说的正向代理,正向代理一般是代理客户端(源服务器,信息的请求者)。这时候,在公网上发送的信息的请求者就是代理服务器的身份,而不是真正客户端的身份。好处显而易见,隐藏客户端的身份。
在这里插入图片描述

反向代理

百度百科:当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

这句话不太好理解,应该改一改:“当一个代理服务器能够代理外部网络上的主机,使得内部网络可以访问时(不通过公网IP),这种代理服务的方式称为反向代理服务。”

在这里插入图片描述

SSH反向代理使用方法

假设123.139.238.155需要访问123.139.238.154的mysql 3306端口,但是有防火墙限制,如果想绕过防火墙则可以通过ssh隧道将123.139.238.154的3306端口代理到123.139.238.155的6003端口上,这样直接在123.139.238.155机器上访问6003端口就相当于访问123.139.238.154的3306端口。具体操作如下:
1、在123.139.238.154机器上执行如下命令

ssh -NfR 6003:localhost:3306 root@123.139.238.155 -p22

2、在123.139.238.155上通过下面命令访问mysql

mysql -h127.0.0.1 -uroot -pApt_2022! -P6003

但是这样子,6003端口只是监听在127.0.0.1上,如果还需要从其他机器访问,则需要这个端口需要监听在内网IP上,这时候又利用到了SSH端口转发的功能:

ssh -N -f -L 123.139.238.155:6003:127.0.0.1:6003 root@123.139.238.155

上面的命令是将123.139.238.155:6003接收到的请求转发哦到本机的127.0.0.1:6003端口上,6003端口恰好是SSH反向代理监听的端口,随后请求就会被转发到123.139.238.154主机上的3306端口,这样在就实现了访问123.139.238.154主机的mysql服务,同时特避免了在防火墙上打洞。

使用autossh断线自动重连

这样子如果123.139.238.154主机上的SSH进程停止了,那么从123.139.238.155就无法访问了,可以利用autossh的自动重连机制来避免这种情况。

在123.139.238.154主机上安装autossh程序后,通过下面的命令启动:

autossh -M 7281 -fCNR 6003:localhost:3306 root@123.139.238.155

-M参数理解为心跳即可。当心跳不通时,就会重连。当然也需要端口再转发下。否则只能从127.0.0.1访问。

再将上面的命令放入脚本中,开机启动即可。

SSH参数说明:

-N:指定这个SSH连接只进行端口消息转发,不执行任何SSH远程命令;
-L:指定本地监听的地址和端口;
-f: 这个SSH会话放入后台运行,不加这个参数的话,当退出当前SSH -L指定的终端时,端口转发进程就结束了,端口转发送也就结束了。所以务必要加上-f参数。

使用autossh时要用到ssh免密登录,参考设置
https://blog.csdn.net/jeikerxiao/article/details/84105529

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSH反向代理使用 的相关文章

  • 将公钥添加到 ~/.ssh/authorized_keys 不会自动登录

    我将公共 SSH 密钥添加到授权密钥 file ssh localhost应该让我登录而不询问密码 我这样做并尝试输入ssh localhost 但它仍然要求我输入密码 我还需要进行其他设置才能使其正常工作吗 我已按照更改权限的说明进行操作
  • hg 存档到远程目录

    有没有办法通过 SSH 将 Mercurial 存储库存档到远程目录 例如 如果可以执行以下操作 那就太好了 hg archive ssh email protected cdn cgi l email protection path to
  • 使用 SSH.NET 在命令输出期间发送输入

    With PuTTY I connect to an SSH server and then I execute a command that constantly output logs multiple lines per second
  • 无法通过 SSH 连接到 openshift

    我在通过 SSH 访问 Openshift 时遇到问题 我仍然可以通过 Git 将代码推送到 Openshift 但是 当尝试通过 SSH 连接到 Openshift 时 服务器被拒绝 并显示错误 没有可用的受支持的身份验证方法 服务器发送
  • BitBucket:身份验证失败

    我点击了这个链接 https confluence atlassian com bitbucket add an ssh key to an account 302811853 html https confluence atlassian
  • 将 ed25519 私钥 ssh 转换为 RSA 私钥

    我正在寻找使用将 ed25519 私钥转换为 rsa 私钥ssh keygen I found 这个有用的指南 https man openbsd org ssh keygen但我无法弄清楚如何指定输入格式为 ed25519 并且导出格式应
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • ssh:无法确定主机“主机名”的真实性

    当我 ssh 到一台机器时 有时我会收到此错误警告 并提示说 是 或 否 当从自动 ssh 到其他机器的脚本运行时 这会导致一些问题 警告信息 The authenticity of host
  • 如何在 Eclipse 中使用 ssh 隧道设置 Subversion?

    我有一个远程服务器 在非标准 ssh 端口上托管我的 subversion 存储库 我想使用 Eclipse 的 subclipse 插件作为客户端来访问 SVN 存储库 我可以使用 svn specialssh 来访问存储库 其中spec
  • 使用Python mysql.connector远程连接MySQL

    以下代码 在同一 LAN 内与 mysql 服务器不同的机器上运行 使用 Python3 和 mysql connector 本地连接到 MySQL 数据库 import mysql connector cnx mysql connecto
  • Jenkins Git 参数插件无法获取标签

    詹金斯版本 1 593 Git 参数插件 0 4 0 GIT 客户端插件 1 16 1 我使用私有 git 存储库 可以通过 ssh 访问 我的构建是参数化的 git参数是TAG TO BUILD 要构建的分支是refs tags TAG
  • Capistrano 和 GitHub Private Repo – 权限被拒绝(公钥)

    我继承了一个托管在 Linode 上的 Rails 项目 之前的开发人员使用 BitBucket 存储库以及 Capistrano 进行部署 我已经在 GitHub 上设置了一个私人存储库 并且正在尝试让 Capistrano 配方发挥作用
  • 无法验证主机真实性

    我第一次做git pull 在git中提示无法确定主机的真实性 与我生成的私钥相比 RSA密钥指纹不正确 我只是想知道如何更新它以便它读取正确的文件以及为什么它首先读取错误的指纹 我遇到了类似的问题 这意味着远程主机未知 不受信任 修复方法
  • 远程 ssh 命令:第一个回显输出丢失

    我试图通过 ssh 1 liner 调用在远程机器上运行多个命令 方法是将它们指定为传递给 bash c 的分号分隔字符串 它适用于某些情况 但不适用于其他情况 看一下这个 Note the echo 1 output is lost ba
  • 通过 SFTP 克隆 Git 存储库

    每次我尝试克隆 Git 存储库时都会遇到致命错误 我运行这个 git clone sftp email protected cdn cgi l email protection git foobar git 我得到这个 fatal Unab
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • Mac OS X 中 Bash 脚本中的 SFTP 命令

    我需要使用 SFTP 和 SSH 从 Mac 主机将文本文件传输到远程 PC freeSSH 这两个连接在本地网络中 那么有没有办法从 Bash 脚本内部运行 SFTP 命令 使用提供的用户名和密码 我已经尝试过一些脚本expect 但我没
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都

随机推荐

  • 微信小程序获取用户openid(详解)

    小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识快速建立小程序内的用户体系 然而因为小程序中的openid不可以直接使用需要用code 登录凭证 去换取openid 获取openid的思路 获取openid首先需要调用小
  • windows安装anaconda3,powershell不能使用命令:conda activate base

    问题背景 新电脑到手 需要重新安装环境 平时以anaconda vscode为主 因此需要一个方便的入口来访问anaconda和python的和环境 例如vscode下面的终端就是默认使用powershell 如果能在这里访问anacond
  • Unity-Animator(ReadOnly)添加关键帧事件

    最近拿了套资源 里面动画都是只读 然后我想加关键帧 加不进去 网络上找了下 大部分都是说ctrl d复制一份 然后在复制那份上改 感觉怪怪的 后来终于发现其实还是有正常点的办法 先选中你要添加事件的动画 点Editor 点开Event 点下
  • cuBLAS的实例

    有关示例代码参考 请参见下面的两个示例 它们显示了使用具有两种索引样式的cuBLAS库API以C编写的应用程序 示例1 使用C和cuBLAS的应用程序 基于1的索引 和示例2 使用C和cuBLAS的应用程序 基于0的索引 Example 1
  • 谷歌浏览器书签保存在哪里以及书签导入导出方法

    文章目录 谷歌浏览器书签保存文件查看 谷歌浏览器书签怎么导出 谷歌浏览器书签怎么导入 谷歌浏览器书签保存文件查看 打开谷歌浏览器 在网页地址栏中输入chrome version 按回车查看谷歌浏览器版本信息 在新出现的页面中 找到个人资料路
  • ARP缓存表和MAC地址表

    前文讲过arp缓存表和mac地址表 现在总结下它们的相同和不同 不同 定义 arp缓存表是主机用来缓存其他主机的ip地址和mac地址的映射关系的表 mac地址表是交换机用来缓存连接在各端口的主机的源mac地址和端口号的映射关系的表 作用 a
  • 记录一次网站漏洞修复过程(一):安全报告

    XXXXX网站安全测试报告 1 测试目标和对象 1 1 测试目标 渗透测试利用网络安全扫描器 专用安全测试工具和富有经验的安全工程师的测试经验 通过网络对系统进行非破坏性质的模拟黑客攻击 目的是深入挖掘漏洞风险 侵入系统并获取敏感信息 并将
  • 算法 分金币

    圆桌旁坐着n个人 每人有一定数量的金币 金币总数总能被n整除 每个人可以给他左右相邻的人一些金币 最终使得每个人的金币数相等 你的任务是求出被转手的金币数量的最小值 输入第一行为整数n n lt 1000000 以下n行每行为一个整数 按逆
  • [已解决] 通配符的匹配很全面,但无法找到元素 'aop:aspectj-autoproxy' 的声明。

    问题背景 今天在基于注解配置AOP的时候 出现了以下错误 Caused by org xml sax SAXParseException lineNumber 37 columnNumber 25 cvc complex type 2 4
  • SpringBoot 学习摘要

    SpringBoot 今日目标 掌握基于SpringBoot框架的程序开发步骤 熟练使用SpringBoot配置信息修改服务器配置 基于SpringBoot的完成SSM整合项目开发 1 SpringBoot简介 SpringBoot 是由
  • Keil开发环境安装教程

    一 环境安装包 百度网盘链接 https pan baidu com s 1MVlP7yWM mDu Rf xFPFQ 二 安装步骤 1 双击安装mdk515 exe 默认即可 可更改路径 2 安装完成后 用管理员的身份运行keil 3 在
  • JavaScript设置innerHTML时出现“未知的运行时错误”--我也遇上了

    在Ajax里经常会通过innerHTML来改变界面 这个比使用DOM要简单一些 比如 element innerHTML something 不过 在IE中 有时候会出现 未知的运行时错误 unknown runtime error 而在f
  • C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法

    题目 C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法 以下是本篇文章正文内容 欢迎朋友们进行指正 一起探讨 共同进步 来自考研路上的lwj 一 前言 当我们在练习文件这一章节时 因为需要从文件中读取数据 有很多数据是中文形式的
  • 【 Spring Boot + MyBatis Plus + Druid】

    1 1 配置版本 具体使用到的各配置版本信息如下 JAVA17 SpringBoot 3 0 5 MyBatis Plus 3 5 3 1 Druid 1 1 14 MySql 5 0 8 因为以前装的老版本的mysql 用的mysql c
  • K210、Openmv与串行总线舵机通信(基于micropython)舵机驱动板和舵机控制板代码

    最近博主在使用幻尔公司 串行总线舵机时 想使用k210控制 openmv和k210都是micropython编写的所以这个代码是通用的 由于官方没有相关例程 树莓派的版本是python版本代码 用不了 特此分享一下控制代码 主要调用函数 a
  • Spring的应用上下文

    Spring提供了多个应用上下文 以下三个必须掌握 因为最容易遇到 1 ClassPathXmlApplicationContext 从classpath处获取xml文件来加载一个上下文 2 ClassPathXmlApplicationC
  • Java学生管理系统(简单版)

    步骤 A 定义学生类 B 学生管理系统的主界面的代码编写 C 学生管理系统的查看所有学生的代码编写 D 学生管理系统的添加学生的代码编写 E 学生管理系统的删除学生的代码编写 F 学生管理系统的修改学生的代码编写 A 定义学生类 Stude
  • HTML表格标签

    标签 与 标签的关系 是互相包裹的关系 或者说 里外嵌套的关系 快捷写法 p gt img 表格 由 table 标签来定义 每个表格均有若干行 由 tr 标签定义 每行被分割为若干单元格 由 td 标签定义 字母 td 指表格数据 tab
  • PHP实现AES-128-CBC加密+base64_encode

    AES加密 public function encrypt input 传false相当于base64 encode 编码了一次 encode base64 encode openssl encrypt input AES 128 CBC
  • SSH反向代理使用

    SSH反向代理 先说说什么是代理 源服务器由于各种原因无法访问目标服务器提供的服务 但是存在一个agent服务器 源服务器可以访问它 它可以访问目标服务器 那么源服务器的消息发给他 它在把请求转发给目标服务器 就间接的实现了源服务器访问目标