![当客户端和主机在同一台机器上时,ssh 如何工作?](https://linux22.com/image/54100/%E5%BD%93%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%92%8C%E4%B8%BB%E6%9C%BA%E5%9C%A8%E5%90%8C%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%97%B6%EF%BC%8Cssh%20%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F%20.png)
我在 docker 容器的帮助下说明了我的问题,但这个例子与问题的其余部分是正交的。事实上,任何允许使用桥接口的程序都ssh
可以。
我使用一个 Docker 容器,它sshd
在后台运行一个守护进程,该守护进程是由supervisord
在前台运行的守护进程生成的。我主要使用 ssh 来实现 X11 转发的安全方式,而无需将安装绑定/tmp/.X11-unix
到容器中并将套接字完全暴露给容器。如果docker top containername
我在启动容器后立即使用,我会得到以下输出:
UID PID PPID C STIME TTY TIME CMD
root 4732 535 1 19:56 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
root 4745 4732 0 19:56 ? 00:00:00 /usr/sbin/sshd
这正如预期的那样。现在,我将容器上的端口 22 暴露给主机上的端口 5000。因此,我可以使用 登录到我的容器ssh -X username@localhost -p 5000
。我知道当客户端和主机是不同的计算机并且位于不同的网络时 ssh 是如何工作的,但是当客户端和主机是同一台计算机时我有一些问题(在我的情况下,客户端是我的普通机器,主机是我普通机器上的容器)。我知道docker在我的普通机器上的物理网络设备和我的机器上的虚拟网络设备之间建立了一座桥梁。
但是我的普通机器和容器到底是如何相互通信的呢?它们是否使用桥接设备分配给它们的 IP 地址并通过这些地址进行通信?
此过程中涉及的端口如何消除使用 IP 地址的需要?
当客户端和主机位于同一台计算机上并按照我刚才概述的方式配置时,是否有最有效/推荐的使用 ssh 的方法。
广泛的互联网搜索没有找到足够的答案。话虽这么说,我当然不会断言这样的网站不存在!