AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 478433
Accepted
confetti
confetti
Asked: 2018-10-30 05:01:27 +0800 CST2018-10-30 05:01:27 +0800 CST 2018-10-30 05:01:27 +0800 CST

SSH 用于隧道时有多安全?

  • 772

场景:我想使用 SSH/SFTP 从客户端 A 连接到客户端 B。我无法在任一客户端上打开端口。为了解决这个问题,我得到了一个便宜的 VPS 用作中继服务器。

在客户端 BI 上,使用远程端口转发连接到 VPS,如下所示:

ssh -4 -N -f -R 18822:localhost:22 <user>@<vps-ip>

在 VPS 上,我使用-g(全局)设置了本地端口转发,如下所示:

ssh -g -f -N -L 0.0.0.0:18888:localhost:18822 <user>@localhost

这样我就可以从客户端 A 直接连接到客户端<vps-ip>:18888B。效果很好。

现在我的问题是,这有多安全?据我所知,SSH/SFTP 连接是完全加密的,但是否有可能通过在中间使用 VPS 来降低安全性?

让我们假设这两种情况:

案例A:VPS本身没有改动,但流量和文件被完全监控。

案例 B:VPS 完全受损,文件系统内容可以更改。

如果我现在通过 SFTP 从客户端 A 向客户端 B 发送文件,托管 VPS 的公司是否可以“拦截”它并读取文件的(未加密)内容?

networking ssh
  • 2 2 个回答
  • 2842 Views

2 个回答

  • Voted
  1. Best Answer
    user232326
    2018-11-02T03:12:23+08:002018-11-02T03:12:23+08:00

    你做了什么

    您使用了三个ssh 命令:

    1. 在B控制台中,您执行了以下操作:

      ssh -4 -N -f -R 18822:localhost:22 <user>@<vps>
      

      命令 sshd(服务器)打开 port 18822,一个连接到 localhost (B) 端口 22的远程端口。vps:18822

    2. 在vps控制台中,您执行了以下操作:

      ssh -g -f -N -L 0.0.0.0:18888:localhost:18822 <user>@localhost
      

      命令 ssh(客户端)打开18888可用作外部( 0.0.0.0) 端口的() 端口,vps该端口连接到内部端口 18822。

      这将打开一个 Internet 可见端口vps:18888,该端口将流量重定向到18822该端口,进而重定向到B:22.

    3. 在A控制台上(也是A 参与的唯一连接):

      在.从客户端A直接连接到客户端B。vps:18888

    重要的是最后的连接。整个 SSH 安全性
    取决于A到B的身份验证。

    这是什么意思

    SSH协议

    SSH 通过不安全的网络提供安全通道

    通过使用端到端加密

    端到端加密 (E2EE) 是一种通信系统,只有通信用户才能读取消息。原则上,它可以防止潜在的窃听者——包括电信提供商、互联网提供商,甚至通信服务提供商——能够访问解密对话所需的加密密钥。

    端到端加密是一个概念。SSH 是一种协议。SSH 实现端到端加密。https 或任何其他数量的加密协议也可以。

    如果协议很强大,并且实现是正确的,那么知道加密密钥的唯一方是两个经过身份验证的(结束)方。

    不知道密钥并且不能破坏协议的安全性,任何其他方都被排除在通信内容之外。

    如果,如您所描述的:从客户端 A 直接到客户端 B,您直接向系统 B 进行身份验证,那么只有客户端 A 和客户端 B 拥有密钥。没有别的。

    第一季度

    案例A:VPS本身没有改动,但流量和文件被完全监控。

    只有通信(日期、时间、最终 IP 等)正在发生并且可以监控一定数量的流量(kbytes、MBytes)这一事实,但不能监控所通信内容的实际内容。

    第二季度

    案例 B:VPS 完全受损,文件系统内容可以更改。

    没关系,即使通信通过其他一些站点/地点重新路由,知道密钥的只有两方是 A 和 B。也就是说:如果通信开始时的身份验证是在 A 和B.

    或者,检查 A 连接的 IP 的有效性,然后: 使用公钥认证(仅使用一次只有 A 和 B 知道的私钥-公钥对),完成。

    了解您必须确保使用的公钥安全地传送到系统 B。您不能信任相同的通道来携带密钥然后进行加密。存在可能破坏协议的中间人攻击。

    第三季度

    如果我现在通过 SFTP 从客户端 A 向客户端 B 发送文件,托管 VPS 的公司是否可以“拦截”它并读取文件的(未加密)内容?

    不,如果公钥被安全地放置在两端,那么发生这种情况的可能性微乎其微。

    带着带公钥的盘到对方去安装,再也不用担心了。


    评论

    从您的评论中:

    第一季度

    所以,基本上我的设置中的 VPS 除了转发端口之外什么都不做,并且不参与从客户端 A 到 B 发生的实际 SSH 连接或身份验证,对吗?

    有点儿。是的,VPS不应该参与身份验证。但它是“In-The-Middle”,即它从一侧接收数据包并将它们(如果工作正常)传递到另一侧。但是还有另一种选择,VPS(或任何中间人)可以选择撒谎并执行“中间人攻击”。它可能对假装客户 B 的客户 A 说谎,对假装客户 A 的客户 B 说谎。这将揭示与“中间人”通信中的所有内容。这就是为什么我在上面强调应该这个词。

    我还应该说:

    ...没有针对使用公钥方法进行身份验证的 SSH 连接实现 MITM 的工具...

    基于密码的身份验证不是公钥方法。

    如果您使用密码进行身份验证,您可能会受到中间人攻击。还有其他几种选择,但不在本文的范围内。

    基本上,使用 ssh-keygen 生成一对密钥(假设在 A 面),并且(为了正确的安全性)将磁盘内的公共部分带到 B 面并将其安装在 Authorized-keys 文件中。不要使用网络安装公钥,即:不要在网络上使用 ssh-copy-id,除非你确实知道自己在做什么,并且能够验证 B 方的身份。您需要成为专家才能安全地执行此操作。

    第二季度

    不过,关于公钥,不是吗,是公开的吗?

    • 是的,它是公开的。
      嗯,是的,生成公私对的实体可以将公共部分发布给任何人(每个人),并且不会丢失任何秘密。如果任何人只用它的公钥加密,它就可以用匹配的(和秘密的)私钥解密任何消息。

    • SSH 加密。
      顺便说一下,SSH 加密是对称的而不是非对称的(公共的)。身份验证是非对称的(DH(Diffie-Hellman)(用于密码)或RSA、DSA、Ed25519 密钥强度或其他(用于公钥)),然后从该身份验证生成对称密钥并用作通信加密密钥。

    • 用于身份验证。
      但是对于 SSH,公钥(使用 ssh-keygen 生成)带有一个额外的秘密:它验证公钥的所有者。

      如果您从 Internet 收到公钥:您如何知道它属于谁?你相信那个公钥声称它是什么吗?你不应该 !!

      这就是为什么您应该将公钥文件携带到远程服务器(以安全的方式)并将其安装在那里。之后,您可以信任该(已验证的)公钥作为验证您登录该服务器的方法。

    第三季度

    我以前也从 VPS 连接到客户端 B,主要用于测试,这不是已经交换了公钥吗?

    它交换一组用于加密的公钥(一组 DH 生成的公钥)。不是使用 ssh-keygen 生成的身份验证公钥。一旦通信关闭,用于该通信的密钥将被删除和遗忘。

    好吧,您还接受(并使用)了一个密钥来验证远程服务器的 IP。确保 IP 的安全性比简单的 ( ?? ) 公钥身份验证更加复杂。

    我的印象是公钥可以共享,但私钥或密码必须保持安全。

    而且您的(一般)印象是正确的,但魔鬼在细节中...

    生成密钥对的人可以发布他的公钥,而不会降低他的安全性。

    接收公钥的人必须 独立确认公钥属于他认为属于谁的人。

    否则,公钥的接收者可能正在与邪恶的伙伴进行通信。

    生成您的密钥

    • 8
  2. ctrl-alt-delor
    2018-11-06T07:51:51+08:002018-11-06T07:51:51+08:00

    如果你用 ssh 把 A 连接到 C,然后 C 连接到 B,那么它不是端到端的。它是 C 的一端,而 C 是另一端。C 可以看到正在传输的内容。

    对于端到端加密,您需要 ssh 来连接两端。你经历了什么并不重要。

    如果两端看不到对方,但可以看到 C,那么您可以建立(安全与否)连接 A-C 和 B-C。然后使用 ssh 建立安全连接 A—B。

    • -1

相关问题

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • rsync 端口 22 和 873 使用

  • SCP突然中止:管道损坏,消息验证码不正确

  • 无法识别arp命令或ip命令哪个MAC地址输出正确

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve