在Windows和Linux之间建立SSH连接
安全外壳协议 (SSH) 是 Linux 世界中通过命令行控制远程机器的最常用方法。 SSH 是真正的 Linux 原创,在 Windows 世界中也越来越受欢迎。甚至还有用于 SSH](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview)的官方[Windows 文档,其中包
安全外壳协议 (SSH) 是 Linux 世界中通过命令行控制远程机器的最常用方法。 SSH 是真正的 Linux 原创,在 Windows 世界中也越来越受欢迎。甚至还有用于 SSH](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview)的官方[Windows 文档,其中包括使用OpenSSH控制 Windows 机器。
本文介绍如何使用流行的开源工具PuTTY建立从 Windows 机器到 Fedora 33 Linux 系统的 SSH 连接。
SSH的使用方法
更多 Linux 资源
-
Linux 命令备忘单
-
高级 Linux 命令备忘单
-
免费在线课程:RHEL 技术概述
-
Linux 网络备忘单
-
SELinux 备忘单
-
Linux常用命令备忘单
-
什么是 Linux 容器?
-
我们最新的 Linux 文章
SSH 使用客户端-服务器架构,其中 SSH 客户端建立与 SSH 服务器的连接。 SSH 服务器通常作为系统守护进程运行,因此通常称为 SSHD。您几乎找不到没有 SSH 守护程序的 Linux 发行版。在 Fedora 33 中,SSH 守护程序已安装但未激活。
您可以使用 SSH 控制几乎任何 Linux 机器,无论它是作为虚拟机运行还是作为网络上的物理设备运行。一个常见的用例是嵌入式设备的无头配置,包括 Raspberry Pi。 SSH 也可用于隧道其他网络服务。由于 SSH 流量是加密的,因此您可以将 SSH 用作默认情况下不提供加密的任何协议的传输层。
在本文中,我将解释四种使用 SSH 的方法:1.如何在 Linux 端配置 SSH 守护进程,2.如何设置远程控制台连接,3.如何通过网络复制文件,以及 4. . 如何通过 SSH 建立某种协议。
1.配置 SSHD
Linux 系统(在我的例子中是 Fedora 33)充当允许 PuTTY SSH 客户端连接的 SSH 服务器。首先,检查守护进程的 SSH 配置。配置文件位于/etc/ssh/sshd_config
,包含很多开关,可以通过注释掉相关行来激活:
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# 这是 sshd 服务器系统范围的配置文件。看
# sshd_config(5) 了解更多信息。
# 这个 sshd 是用 PATHu003d/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin 编译的
# 用于默认 sshd_config 中的选项的策略
# OpenSSH 是用它们的默认值指定选项,其中
# 可能,但请留下评论。未注释的选项覆盖
# 默认值。
包括 /etc/ssh/sshd_config.d/*.conf
#端口 22
#AddressFamily 任何
#ListenAddress 0.0.0.0
#ListenAddress ::
默认配置(没有取消注释的行)应该适用于本示例。通过输入systemctl status sshd
检查 SSH 守护进程是否已经在运行:
$ systemctl 状态 sshd
● sshd.service - OpenSSH 服务器守护进程
已加载:已加载(/usr/lib/systemd/system/sshd.service;已启用;供应商预设:已启用)
活跃:自 2018 年星期五-06-22 11:12:05 UTC 起活跃(运行); 2 年 11 个月前
文档:man:sshd(8)
人:sshd_config(5)
主PID:577(sshd)
任务:1(限制:26213)
CGroup:/system.slice/sshd.service
└─577 /usr/sbin/sshd -D -oCiphers\u003daes256-gcm@openssh.com,chacha20-[...]
如果它处于非活动状态,请使用systemctl start sshd
命令启动它。
2.设置远程控制台
在 Windows 上,下载 PuTTY 安装程序,然后安装并打开它。你应该看到一个像这样的窗口:
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
在 Host Name (or IP address) 输入字段中,输入您的 Linux 系统的连接信息。在这个例子中,我设置了一个带有桥接网络适配器的 Fedora 33 虚拟机,我可以使用它来联系 IP 地址为192.168.1.60
的系统。点击 Open,应该会打开一个像这样的窗口:
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
这是一种 SSH 安全机制,用于防止中间人攻击。消息中的指纹应与 Linux 系统上/etc/ssh/ssh_host_ed25519_key.pub.
处的密钥匹配。 PuTTY 将密钥打印为MD5 哈希。要检查其真实性,请切换到 Linux 系统,打开命令 shell,然后输入:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
输出应与 PuTTY 显示的指纹匹配:
$ ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
256 MD5:E4:5F:01:05:D0:F7:DC:A6:32 无评论 (ED25519)
单击 Yes 确认 PuTTY 安全警报。主机系统的指纹现在位于 PuTTY 信任列表中,该列表位于 Windows 注册表中:
HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys
输入正确的登录凭据,您应该在主目录的控制台上:
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
3.通过网络复制文件
除了远程控制台,您还可以使用 PuTTY 通过 SSH 传输文件。查看C:\\Program Files (x86)\\PuTTY
下的安装文件夹,找到pscp.exe
。您可以使用它来将文件复制到 Linux 系统或从 Linux 系统复制文件。
使用 Windows + R 打开命令提示符并输入 cmd。输入以下命令,将文件MyFile.txt
从 Linux 用户主目录复制到 Windows 主目录:
C:\"Program Files (x86)"\PuTTY\pscp.exe stephan@192.168.1.60:/home/stephan/MyFile.txt .
要将文件从 Windows 主目录复制到 Linux 用户主目录,请输入:
C:\"Program Files (x86)"\PuTTY\pscp.exe MyFile.txt stephan@192.168.1.60:/home/stephan/
您可能已经知道,复制命令的一般结构是:
pscp.exe <source> <target>
4.隧道协议
想象一下,您有一台 Linux 机器,它正在为某个任意应用程序运行基于 HTTP 的服务。您想通过 Internet 从您的 Windows 计算机访问此 HTTP 服务。当然,您不能将相关的 TCP 端口公开给公众,因为:
1.服务器运行的是HTTP,不是HTTPS
2.根本没有用户管理和登录
乍一看,在不产生可怕的安全漏洞的情况下设置这种架构似乎是一项不可能完成的任务。但是 SSH 可以相对容易地为这种情况设置安全的解决方案。
我将用我的软件项目Pythonic来演示这个过程。作为容器运行,Pythonic 公开了两个 TCP 端口:TCP 端口 7000(主编辑器)和 TCP 端口 8000(代码服务器源代码编辑器)。
要在 Linux 机器上安装 Pythonic,请运行:
podman pull pythonicautomation/pythonic
播客运行 -d -p 7000:7000 -p 8000:8000 pythonic
切换到您的 Windows 机器,打开 PuTTY,然后导航到 Connection -> SSH -> Tunnels。添加要转发的两个 TCP 端口:
-
来源:
7000
/ 目的地:localhost:7000
-
来源:
8000
/ 目的地:localhost:8000
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
然后回到 Session 部分,像以前一样建立 SSH 连接。打开浏览器并导航到http://localhost:7000
;你应该看到这样的屏幕:
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
您已成功配置端口转发!
警告:如果您向公众公开 TCP 端口 22,请不要使用易于猜测的登录凭据。您将收到来自世界各地的登录尝试,试图使用通用的标准凭据访问您的 Linux 机器。相反,只允许已知的客户端登录。这个登录限制可以使用公钥加密来实现,它使用一个密钥对,其中公钥存储在 SSH 主机上,而私钥保留在客户。
调试
如果您正在努力连接到您的 Linux 机器,您可以按照 SSH 守护程序中的进程执行以下操作:
journalctl -f -u sshd
这是使用 LogLevel DEBUG 的普通登录过程的样子:
图片来源:
(斯蒂芬·阿文维德,CC BY-SA 4.0)
了解更多
这篇文章几乎没有涉及到使用 SSH 的方法的表面。如果您正在寻找有关特定用例的信息,您可能会在互联网上的大量 SSH 教程中找到它。我在工作中大量使用 PuTTY,因为它易于配置和操作系统之间良好的互操作性使其成为连接解决方案的瑞士军刀工具。
更多推荐
所有评论(0)