SSH 穿越多个跳板机的连接方法

简介: SSH 穿越多个跳板机的连接方法

鉴于安全原因,工作需要使用跳板机登录;鉴于服务器环境老旧,我需要在服务器上使用 docker 来搞个开发环境,所以需要有一种方法穿越层层阻隔,让我的 vscode 直接连过去。


SSH 公钥和私钥


  • 首先搞清楚一些基本关系,一般使用密钥登录,ssh-keygen -t rsa 运行此命令产生公钥私钥(id_rsa 和 id_rsa.pub),一路回车可以不设置保护密码,假设要登录的机器是 server,登录的终端是 client,那么将公钥 id_rsa.pub 的内容记录在 server 的 authorized_keys 中,然后 client 使用私钥 id_rsa 登录。
  • 每一个被登录的机器都开启的 ssh 服务,并配置了 ssh 密钥登录功能。对于我的需求来说,公司的跳板机和服务器一定是已经配置的,否则无法登录服务器,因此我还需要在 docker 中配置 ssh 密钥登录服务。
  • client 设置登录的层层专跳(这是重点)

ssh 相关的文件如果没有特殊说明,都是在 ~/.ssh 文件夹中,ssh 服务的配置文件在 /etc/ssh/sshd_config 中。

##openssh 的 ProxyJump

在 openssh7.5 之后(ubuntu18.04),支持 ProxyJump 语句,非常方便。windows 不支持。

假设我们登录路径是这样的:

client->jump_server->server->dev_docker

那么 client 的 ~/.ssh/config 文件应该如下:


Host jump
    HostName <jump_server ip>
    Port <jump_server port>
    User <jump_server username>
    IdentityFile <jump_server id_rsa>
Host server
    HostName <server ip>
    Port <server port>
    User <server username>
    IdentityFile <server id_rsa>
    ProxyJump jump
Host dev_docker
    HostName <dev_docker ip>
    Port <dev_docker port>
    User <dev_docker username>
    IdentityFile <dev_docker id_rsa>


代码中有三个主机配置,分别是 jumpserverdev_docker。每个主机都有不同的 IP 地址、端口、用户名和身份验证文件等信息。

其中,jump 配置使用了 SSH 的跳板代理(ProxyJump)功能,它可以让你通过跳转到一个中转服务器(jump_server)来连接远程服务器(server)。ProxyJump jump 选项就是表示使用 jump 作为跳板代理。

每个主机配置的具体细节如下:

  • jump:指定中转服务器的 IP 地址、端口、用户名和身份验证文件等信息。
  • server:指定远程服务器的 IP 地址、端口、用户名和身份验证文件等信息,同时借助 ProxyJump 选项指定了使用跳板代理连接该服务器。
  • dev_docker:指定 Docker 容器内的开发环境的 IP 地址、端口、用户名和身份验证文件等信息。

这样,在实际使用 SSH 客户端连接每个主机时,只需要使用对应的别名(即 Host 参数的值),SSH 客户端就会自动读取 ~/.ssh/config 文件中的配置信息,并使用这些选项连接相应的主机,从而节省了很多输入连接参数的时间和精力。

然后在 client 中,直接使用 ssh dev_docker 命令,ssh 就会一步步登录过去。使用 -v 可以看到每一步的登录过程。

vscode 会自动读取 config 文件,就可以直接打开 docker 中的文件夹了。真的很方便。

还有两个比较实用的配置,同样是配置在客户端:

  • ServerAliveInterval 60:每隔 60s 服务器发送一个包看客户端是否有响应。
  • ServerAliveCountMax 600:服务器发出请求后客户端没有响应的次数达到一定值,就自动断开,正常情况下,客户端不会不响应。

这两个配置组合就可以保持 ssh 的长连接了,不用一直手动连接。

目录
相关文章
|
5月前
|
网络安全 开发工具 git
配置本地环境以管理Git多账户SSH连接的方法
通过以上步駟设置后, 您可以轻松管理多個 Git 账户并且根据不同项目需求切换 SSH 密匙进行版本控制操作。
435 20
|
5月前
|
Unix Linux Shell
指定端口-SSH连接的目标(告别 22 端口暴力破解)
本文介绍了 SSH 命令 `ssh -p 44907 root@IP` 的含义与使用方法,包括命令结构拆解、完整示例及执行过程详解,帮助用户安全地远程登录服务器。
692 0
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
6月前
|
网络安全 数据安全/隐私保护 开发者
诊断并修复SSH连接Github时遇到的"connection closed"错误。
解决"connection closed"错误往往是一个排除法的过程。需要从基础的网络检查做起,逐步过渡到深入的配置和服务端日志审查。每一步都应当仔细验证,确保不遗漏可能导致连接问题的任何细节。在执行以上步骤后,大多数SSH连接问题可以得到解决。如果所有步骤都未能解决问题,可能需要寻求更专业的技术支持,或者在GitHub社区寻找是否有其他开发者遇到并解决了类似的问题。
810 0
|
6月前
|
安全 网络安全 数据安全/隐私保护
解决SSH测试连接GitHub时出现“connection closed by remote host”的问题。
然后使用 `ssh -T git@ssh.github.com`来测试连接。
789 0
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
1841 6
|
10月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
441 10
|
11月前
|
安全 Linux 网络安全
CentOS 8下SSH连接超时与“无法加载主机密钥”错误的排查与修复
在CentOS 8系统中,宝塔面板提示“出错了,面板运行时发生错误”,导致插件无法正常显示。同时,SSH连接超时,修复面板功能失效。通过VNC连接排查,发现SSH服务安装和配置问题频发,最终通过重装SSH、调整权限并重新生成主机密钥文件解决问题,成功恢复SSH连接。
818 16
|
监控 Ubuntu 安全
debian或Ubuntu中开启ssh允许root远程ssh登录的方法
在Debian或Ubuntu系统中启用root用户的SSH远程登录需要编辑SSH配置文件、设置root密码并重启SSH服务。虽然这可以在某些情况下提供便利,但必须注意安全性,通过使用强密码、限制IP访问、使用SSH密钥认证等方法来保护服务器的安全。
6047 5
|
网络安全 数据安全/隐私保护 C++
VS Code 的SSH连接不成功问题分析与解决
VS Code 的SSH连接不成功问题分析与解决