暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在windows和linux之间建立ssh连接

TIAP 2021-06-14
1151

Shell 安全协议(SSH)是 Linux 中最常用的控制远程机器的命令行方法。SSH 是真正的 Linux 原创版本,在 Windows 领域也越来越受欢迎,甚至还有官方的 SSH Windows 文档,其中就包括使用 OpenSSH 控制 Windows 系统的文档。

本文介绍如何使用开源工具 PuTTY 从 Windows 和 Fedora33 Linux 系统之间建立 SSH 连接。


为什么要用SSH

SSH 使用客户端-服务器(client-server)体系结构,其中 SSH 客户端建立到 SSH 服务端的链接。SSH 服务端通常作为系统守护进程而运行,因此通常称为 SSHD。Linux 系统发行版中一般都会有SSH守护进程。在 fedora 33 中,也安装了 SSH 守护进程,但默认没有激活。

你可以使用 SSH 来操作几乎所有的 Linux 系统,无论是虚拟机还是网络上的物理设备。一个常见的应用例子就是嵌入式设备的无界面配置,其中包括 Raspberry Pi。SSH还可以用于其他网络服务的隧道。因为 SSH 通信是加密的,所以可以将 SSH 用作默认情况下不提供加密协议的传输层。

本文将解释四种使用 SSH 的方法:

1) 如何在 Linux 端配置 SSH 守护程序;

2) 如何设置远程控制台连接;

3) 如何通过网络复制文件;

4) 如何通过 SSH 隧道特定协议。


1. 设置SSHD

Linux系统(本文以 fedora 33为例)充当 SSH 服务器,接受 PuTTY SSH 客户端的连接。首先检查守护进程的 SSH 配置,配置文件位于 etc/ssh/sshd_config路径中,包含很多配置,可以通过注释掉相关代码来激活这些配置:

# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::



本例子中的默认配置,都被注释掉的。检查 SSH 守护进程是否已经运行,可以通过键入命令:systemctl status sshd

$ systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-06-22 11:12:05 UTC; 2 years 11 months ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 577 (sshd)
    Tasks: 1 (limit: 26213)
   CGroup: /system.slice/sshd.service
           └─577 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-[...]


如果已经被激活了,那运行以下命令来启动:

systemctl start


2. 设置远程控制台

在 Windows 系统中,下载 PuTTY 安装程序,然后安装并运行,你会看到以下画面:



在主机名称(或 IP 地址)选项[Host Name(or IP address)]中,输入Linux系统的IP地址(本例中是192.168.1.60),后面是端口号(本例中是22),然后点击打开(open),你会看到:



这是一种 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 no comment (ED25519)


确认 PuTTY 中的安全警告,点击确定(Yes), 这样服务端的指纹信息就保存在了PuTTY的信任白名单中了,这个信息保存在Windows系统中的注册表中:

HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys

输入登录信息,你就能看到主目录的控制台了:


3. 通过网络传输文件

除了远程控制台之外,还可以使用 PuTTY 通过 SSH 传输文件。在 C:\\Program Files (x86)\\PuTTY 下的安装文件夹中查找 pscp.exe。你可以使用它在 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/


你可能已经知道,copy 命令的一般语法是:

pscp.exe <source> <target>


4. 隧道协议

假设你有一台 Linux 机器,它正在为某个特定的应用提供基于 HTTP 协议的服务。你希望通过网络从Windows系统中访问此 HTTP 服务。当然你不能向公众公开相关的 TCP 端口,因为:

1) 服务传输协议是http, 而不是https

2) 没有用户管理,或者根本就没有登录

乍一看,在不产生可怕的安全漏洞的情况下建立这种体系结构似乎是一项不可能完成的任务。但 SSH 为这个场景设置一个安全的解决方案变得相对容易。

我将用我的软件项目Pythonic演示这个过程。Pythonic作为容器运行,它公开了两个TCP端口:TCP端口7000(主编辑器)和TCP端口8000(代码服务器源代码编辑器)。

要在Linux计算机上安装Pythonic,执行:

podman pull pythonicautomation/pythonic

podman run -d -p 7000:7000 -p 8000:8000 pythonic


转到Windows机器,打开 PuTTY,然后找到:Connection -> SSH -> Tunnels,添加要转发的两个TCP端口:

Source: 7000 / Destination: localhost:7000
Source: 8000 / Destination: localhost:8000



然后返回,像以前一样建立 SSH 连接,打开浏览器访问地址 http://localhost:7000, 你会看到:


这表示你已成功的配置了端口转发。

注意:如果要向公众公开tcp端口22,不要使用简单的登录凭据,否则你会收到来自世界各地的登录尝试,尝试通过普通的标准平局来访问你的 Linux 机器。所以,只允许已知的客户端登录。这种登录限制可以通过使用公钥密码来实现,公钥密码使用一个密钥对,其中公钥存储在 SSH 主机上,私钥 保留在客户机上。


调试

如果你正在连接 Linux 机器,可以按照 SSH 守护程序中的流程执行以下操作:

journalctl -f -u sshd


这是使用 LogLevel DEBUG 时普通登录过程的样子:


本文没有讲述 SSH 的使用方法,如果你想要查找相关的例子,可以在网上搜索,会有很多资料。我在工作中经常使用 PuTTY, 因为它配置简单并且在各操作系统之间操作方便使得它成为一种很好的解决方案。


本文作者:Stephan Avenwedde,翻译:GLIU

原文地址:https://opensource.com/article/21/6/ssh-windows

文章转载自TIAP,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论