在 Linux 世界中,安全外壳secure shell(SSH)协议是最为常用的、通过命令行控制远程计算机的方式。SSH 是真正的 Linux 原创,但是它在 Windows 世界中也越来越流行。甚至有了一份官方的 Windows 的 SSH 文档,那篇文档阐述了使用OpenSSH控制 Windows 的方法。
这篇文章展示了如何使用了流行的开源工具 PuTTY,建立一个从 Windows 到 Fedora 33 Linux 系统的 SSH 连接。
你可以使用 SSH 控制几乎所有的 Linux 机器,无论它是作为虚拟机还是作为网络上的物理设备运行。一个常见的用例是无头headless配置的嵌入式设备,如树莓派。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][5],chacha20-[...]
如果它处于未激活inactive状态,使用 systemctl start sshd命令启动它。
2、设置远程控制台
在 Windows 下 下载 PuTTY 安装程序,然后安装并打开它。你应看到一个像这样的窗口:
在“主机名(或 IP 地址)Host Name (or IP address)”输入框,键入你的 Linux 系统的连接信息。本文设置了一个 Fedora 33 虚拟机,它使用桥接网络适配器,使我可以由 IP 地址 192.168.1.60连接这个系统。点击“打开Open”,应会如图示的打开一个窗口:
这是 SSH 的安全措施之一,是为了防止中间人攻击man-in-the-middle attack。消息中的指纹应该匹配 Linux 系统中放在/etc/ssh/ssh_host_ed25519_key.pub的密钥。PuTTY 将这个密钥以MD5 哈希值的方式打印出来。要检查它的真实性,切换到 Linux 系统并打开一个控制台,然后输入:
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.pub256 MD5:E4:5F:01:050:F7C:A6:32 no comment (ED25519)
点击“是Yes”以确认 PuTTY 的安全提示。主机系统的指纹现在存储在 PuTTY 的信任列表中,其位于 Windows 的注册表中的:
HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys
输入正确的登录凭证,然后你应该进入控制台了,位置在你的用户主目录。
3、通过网络复制文件
除了远程控制台,你同样可以使用 PuTTY 通过 SSH 来传输文件。PuTTY 的安装目录在 C:\Program Files (x86)\PuTTY,在该目录下寻找ppscp.exe。你既可以使用它从 Linux 系统复制文件,也可以复制文件到 Linux 系统。
使用 Windows + R然后输入cmd来打开命令提示符,从你的 Linux 用户主目录复制MYFile.txt到你的 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
4、隧道化一个协议
假设你拥有一个 Linux 机器,为某些特别的应用运行一个基于 HTTP 的服务。你想从你的 Windows 机器通过互联网访问这个 HTTP 服务。而且,你不能将相关的 TCP 端口暴露在公网,因为: