蚊章汇 - SSH
type: channel
link: https://linuxcn.bwsl.wang/tag/SSH/
items: 真的，宇宙射线会导致部分 SSH 服务器的私钥泄露
items: 通过 SSH 在远程 Linux 系统上执行命令
items: 在 Ubuntu 中配置 SSH 的完整指南
items: 如何从 Windows 上用 SSH 连接到 Linux
items: 保护 SSH 的 3 个技巧
items: Linux 远程连接之 SSH 新手指南
items: 三种 Linux 下的 SSH 图形界面工具
items: 使用开源工具 nccm 管理 SSH 连接
items: 借助 HTTP 通过 SSH 绕过 Linux 防火墙
items: 如何使用 Squid 配置 SSH 代理服务器

真的，宇宙射线会导致部分 SSH 服务器的私钥泄露
type: item
date: 2023-11-17T09:00:00+08:00
description: 如果你是 OpenSSL、LibreSSL、OpenSSH 的用户，你可以坐下来看看了，因为这不会影响你。最近一项学术研究展示了如下情况：对于某些特定设备，他人可以监听其 SSH 连接，然后借助一些运气在无声无息中破译出主机的私有 RSA 密钥，从而冒充该设备。冒充这些设备后，通过使用推断出的主机密钥私钥实施的中间人攻击，间谍可以安静地记录用户的登录信息，同时，通过将这些连接转发给真正的设备，他们还可以监控用户在远程 SSH 服务器上的活动。尽管 SSH 还有其他功能，但其主要应用场景仍然是用户登录到设备并通过命令行接口进行控制。据悉，可以通过被动监视从客户端到易受攻击设备的 SSH 服务器的连接，获得主机的 RSA 密钥私钥：无论是在签名生成过程中的偶发运算错误，还是因宇宙射线等微小故障产生的自然错误，都可以被观察和利用来推算 SSH 服务器的主机密钥私钥，这本应是保密的。虽然可能认为自然错误发生的概率很小，偶发错误可能已为众所周知，但实际上只要你连续观察足够多的到有漏洞的 SSH 服务器的 SSH 连接，你就有可能发现一个你可以利用的。重要的一点是，软件库 OpenSSL 和 LibreSSL，以及 OpenSSH，都未发现存在上述密钥推导问题的漏洞。由此，我们认为，网上的大部分设备、服务器和其他设备都不会受到影响，只有特定的物联网设备和类似的嵌入式设备可能会对此种攻击敏感。此外，这种问题也仅影响 RSA 密钥。细节由加利福尼亚大学圣地亚哥分校的 Keegan Ryan、Kaiwen He（他同时也在麻省理工学院任职）、George Arnold Sullivan 以及 Nadia Heninger 基于早期的一些研究，完成并撰写了这项研究。他们采用的技术，旨在揭示 RSA 密钥私钥，该技术源于 Florian Weimer 在 2015 年对 TLS 的突破性研究，以及 2022 年圣地亚哥论文的几位作者以及其他研究者的一些工作，这些工作可追溯到 1990 年代。信息安全专家 Thomas Ptacek 曾高度赞扬了 2023 年研究的合著者 Nadia Heninger，并在此分享了 RSA 密钥分析论文的摘要，以便于理解这个问题。我们同时也要感谢曾在 Register vulture 工作的 Dan Goodin，他在周一通过 Ars Technica 向我们报告了 UC 圣地亚哥论文的消息。基本上，当客户端尝试连接到一个容易受到攻击的 SSH 服务器时，它们在协商建立全面安全加密通信的过程中，服务器将会生成一个数字签名以供客户端检查，以确保其正在与预期的服务器通信。如我们之前所述，这个签名的计算过程可能会随机或意外地产生错误，聪明的算法可以从错误的签名中推导出服务器的私有 RSA 密钥，此密钥用于签名生成。对此的一种防范措施是在将签名发送给客户端前确保其计算正确；OpenSSL 和 LibreSSL 已经在实施这种防范。正如论文作者在他们的摘要中提到的：“我们证明了一种可能性：若 SSH 服务器在进行签名计算过程中出现自然故障，一名被动的网络攻击者便有机会获得其私有 RSA 主机密钥。在之前的研究中，我们通常认为这对于 SSH 协议是不可行的，因为签名中包含了一些信息，比如 Diffie-Hellman 共享密钥，这些信息对于被动的网络观察者来说无法获得。然而，我们证明了，在 SSH 中经常使用的签名参数下，如果出现了签名错误，我们便能有效地使用 格攻击 lattice attack 来恢复私钥。我们对 SSH、IKEv1、IKEv2 协议进行了安全分析，在此场景下，我们利用我们的攻击方法在现实环境中挖掘出几个存在漏洞的独立实现中的数百个被攻破的密钥。“一个被动的对手可以安静地监控合法的连接，不用冒被检测的风险，直到他们观察到一个包含私钥的错误签名。”研究团队做出了这样的结论：“然后，攻击者可以主动且不会被检测地冒充被攻破的主机，从而截取敏感数据。”研究人员表示，他们已经扫描了整个互联网，并翻查了以前收集的 SSH 扫描数据，以测量易受攻击的签名的流行程度。他们声称，他们的数据集涵盖了 52 亿条 SSH 记录和超过七年的观察，其中包含了超过 59 万个无效的 RSA 签名。通过他们的格密钥恢复技术，学者们表示，其中超过 4900 个错误的签名揭示了对应 RSA 公钥的因子分解。他们利用这些信息，推导出了 189 个公钥的私有 RSA 密钥。在他们的研究中，作者们发现，思科、Zyxel、山石网科和 Mocana 这四个制造商的产品都可能受到这种密钥侦测攻击。研究者已经向思科和 Zyxel 报告了这个问题，观察到两家供应商都迅速进行了调查行动。思科判定其 ASA 和 FTD 软件在 2022 年已经解决了此问题，且在…

通过 SSH 在远程 Linux 系统上执行命令
type: item
date: 2022-11-18T00:39:12+08:00
description: 通过安全的网络连接在远程计算机上调用命令或程序。有一天，我正在测试如何在 将文件或目录复制到多个位置和系统时保持完整的文件权限。当我想检查远程系统上的文件权限时，我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注销的过程让我有点烦，我想，如果我可以在远程 Linux 系统上通过 SSH 执行命令就好了。幸运的是，在浏览了 ssh 命令的手册页后，我找到了一个解决办法。如果你想知道如何本地运行远程系统上运行命令或脚本，而不登录到远程系统，下面的内容会告诉你如何做。1、通过 SSH 在远程 Linux 系统上执行命令从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是：$ ssh <username@IP_Address-or-Doman_name> <Command-or-Script> 允许我给你们举几个例子：1.1、通过 SSH 在远程系统上运行单个命令假设你想要 查找远程 Linux 系统的内核详细信息。为此，只需运行：$ ssh sk@192.168.225.22 uname -a 这里，sk 是远程系统的用户名，192.168.225.22 是远程系统的 IP 地址，uname -a 是我想在远程系统上运行的命令。示例输出：看到没？我并没有实际登录到远程系统，但通过 SSH 在远程系统上执行了 uname 命令，并在本地系统的终端上显示了输出。你还可以像下面这样用引号指定命令。$ ssh sk@192.168.225.22 "uname -a" 或者，$ ssh sk@192.168.225.22 'uname -a' 如果你已经 更改了 SSH 协议的默认端口，只需使用 -p 参数指定它。$ ssh -p 2200 sk@192.168.225.22 uname -a 1.2、通过 SSH 在远程主机上执行多个命令你还可以在远程主机上运行多个命令，方法是将它们放在引号中。$ ssh sk@192.168.225.22 "uname -r && lsb_release -a" 或者：$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a" 上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。示例输出：正如一位读者在下面的评论部分提到的那样，你应该用引号指定多个命令。如果不使用引号，第一个命令将在远程系统上执行，第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。提示： 了解 && 和 ; 在命令中的区别：&& 操作符只有在第一个命令成功时才执行第二个命令。示例：sudo apt-get update && sudo apt-get upgrade 在上述示例中，如果第一个命令成功，才会执行 sudo apt-get upgrade。否则，它将不会运行。; 操作符会执行第二个命令，无论第一个命令是成功还是失败。示例：sudo apt-get update ; sudo apt-get upgrade 在上述示例中，即使第一个命令失败，sudo apt-get upgrade 也会执行。1.3、通过 SSH 在远程机器上调用有 sudo 权限的命令有些命令需要 sudo 权限才能运行。例如，以下命令将在我的远程系统上安装 apache2。$ ssh -t sk@192.168.225.22 sudo apt install apache2 示例输出：注意到了吗？我在上面的命令中使用了 -t 标志，我们需要使用它来强制进行伪终端分配。它用于在远程机器上执行任意基于屏幕的程序，这非常有用。例如，在实现菜单服务时。另外，我输入了两次密码。第一次是远程用户的密码，以便从本地系统通过 SSH 访问远程系统，第二次是为了向远程用户赋予 sudo 权限，以便安装应用程序（在本例中为 apache2）。让我们用以下命令检查 Apache 服务是否正在运行：$ ssh -t sk@192.168.225.22 sudo systemctl status apache2 sk@192.168.225.22's password: [sudo] password for sk: ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu…

在 Ubuntu 中配置 SSH 的完整指南
type: item
date: 2022-10-25T18:21:20+08:00
description: 如今 SSH 已成为了登录远程服务器的默认方式。SSH 的全称是 “ 安全的 Shell Secure Shell ”，它功能强大、效率高，这个主流的网络协议用于在两个远程终端之间建立连接。让我们不要忘记它名称的“安全”部分，SSH 会加密所有的通信流量，以防止如劫持、窃听等攻击，同时提供不同的身份认证方式和无数个配置选项。在这份新手指南中，你会学到：SSH 的基本概念设置 SSH 服务器（在你想要远程登录的系统上）从客户端（你的电脑）通过 SSH 连接远程服务器SSH 的基本概念在学习配置过程前，让我们先了解一下 SSH 的全部基础概念。SSH 协议基于 客户端-服务器 server-client （CS）架构。“ 服务器 Server ”允许“ 客户端 Client ”通过通信通道进行连接。该信道是经过加密的，信息交换通过 SSH 公私钥进行管理。OpenSSH 是在 Linux、BSD 和 Windows 系统上提供 SSH 功能的最流行的开源工具之一。想要成功配置 SSH，你需要：在作为服务器的机器上部署 SSH 服务器组件，它由 openssh-server 包提供。在你远程访问服务器的客户端机器上部署 SSH 客户端组件，它由 openssh-client 包提供，大多数 Linux 和 BSD 发行版都已经预装好了。区分服务器和客户端是十分重要的事情。或许你不想要你的 PC 作为 SSH 服务器，除非你有充分理由希望其他人通过 SSH 连接你的系统。通常来说，你有一个专用的服务器系统。例如，一个 运行 Ubuntu 的树莓派。你可以 启用树莓派的 SSH 服务，这样你可以在你 PC 中的终端中，通过 SSH 控制并管理该设备。有了这些信息，让我们看看如何在 Ubuntu 上设置 SSH 服务器。在 Ubuntu 服务器中配置 SSH设置 SSH 并不复杂，只需要以下几步。前提一个在服务器端拥有 sudo 权限的用户可以下载所需包的互联网连接在你的网络中至少有另一个系统。可以是局域网中的另一台电脑，远程服务器或者计算机中托管的虚拟机。再次强调，在你想要通过 SSH 远程登录的系统上安装 SSH 服务。第一步：安装所需包让我们从打开终端输入一些必要命令开始。注意，在安装新的包或者软件前，要 更新你的 Ubuntu 系统，以确保运行的是最新版本的程序。sudo apt update && sudo apt upgrade 你要运行 SSH 服务器的包由 OpensSSH 的 openssh-server 组件提供：sudo apt install openssh-server 第二步：检查服务器状态当你下载并安装完包后，SSH 服务器应该已经运行了，但是为了确保万无一失我们需要检查一下：service ssh status 你还可以使用 systemctl 命令：sudo systemctl status ssh 你应该会看到这样的结果，其中 active 是高亮的。输入 q 退出该页面。如果你的结果中 SSH 服务没有运行，使用这个命令运行它：sudo systemctl enable --now ssh 第三步：允许 SSH 通过防火墙Ubuntu 带有名为 UFW（ 简单的防火墙 Uncomplicated Firewall ）的防火墙，这是管理网络规则的 iptables 的一个接口。如果启动了防火墙，它可能会阻止你连接服务器。想要配置 UFW 允许你的接入，你需要运行如下命令：sudo ufw allow ssh UFW 的运行状态可以通过运行 sudo ufw status 来检查。现在，我们的 SSH 服务器已经开始运行了，在等待来自客户端的连接。连接远程服务器你本地的 Linux 系统已经安装了 SSH 客户端。如果没有，你可以在 Ubuntu 中使用如下命令安装：sudo apt install openssh-client 要连接你的 Ubuntu 系统，你需要知道它的 IP 地址，然后使用 ssh 命令，就像这样：ssh username@address 将 用户名（username）改为你的系统上的实际用户名，并将 地址（address）改为你服务器的 IP 地址。如果你 不知道 IP 地址，可以在服务器的终端输入 ip a 查看结果。应该会看到这样的结果：可以看到我的 IP 地址是 192.168.1.111。让我们使用 username@address 格式进行连接。ssh team@192.168.1.111 这是你第一次连接到该 SSH 服务器，它会请求添加主机。输入 yes 并回车即可。SSH 会立即告诉你该主机已经被永久添加了，并要求你输入指定用户的密码，输入密码并再次按回车即可。瞧…

如何从 Windows 上用 SSH 连接到 Linux
type: item
date: 2022-07-23T19:00:47+08:00
description: 使用开源的 PuTTY 工具，从 Windows 建立到 Linux 的 SSH 连接。在 Linux 世界中， 安全外壳 secure shell （SSH）协议是最为常用的、通过命令行控制远程计算机的方式。SSH 是真正的 Linux 原创，但是它在 Windows 世界中也越来越流行。甚至有了一份官方的 Windows 的 SSH 文档，那篇文档阐述了使用 OpenSSH 控制 Windows 的方法。这篇文章展示了如何使用了流行的开源工具 PuTTY，建立一个从 Windows 到 Fedora 33 Linux 系统的 SSH 连接。使用 SSH 的方法SSH 使用客户端-服务器模式，即 SSH 客户端会创建到 SSH 服务端的连接。SSH 服务器通常会作为 守护进程 Daemon 运行，所以它常被称为 SSHD。你很难找到一个不自带 SSH 守护进程的 Linux 发行版。在 Fedora 33 中，已安装了 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 安装程序，然后…

保护 SSH 的 3 个技巧
type: item
date: 2022-02-21T19:36:02+08:00
description: 以下是我如何优化我的 SSH 体验并保护我的服务器不被非法访问。SSH（安全 Shell）是一个协议，它使你能够创建一个经过验证的私人连接，并使用加密密钥保护通道，在另一台机器上启动一个远程 Shell。使用这种连接，你可以执行远程命令，启动安全文件传输，转发套接字、显示和服务，等等。在 SSH 出现之前，大多数远程管理是通过 telnet 完成的，公平地说，一旦你能建立一个远程会话，你几乎可以做任何你需要的事情。这个协议的问题是，通讯是以纯明文的方式进行的，没有经过加密。使用 流量嗅探器 不需要太多努力就可以看到一个会话中的所有数据包，包括那些包含用户名和密码的数据包。有了 SSH，由于使用了非对称密钥，参与通信的设备之间的会话是加密的。如今，这比以往任何时候都更有意义，因为所有的云服务器都是由分布在世界各地的人管理的。3 个配置 SSH 的技巧SSH 协议最常见的实现是 OpenSSH，它由 OpenBSD 项目开发，可用于大多数 Linux 和类 Unix 操作系统。一旦你安装了这个软件包，你就会有一个名为 sshd_config 的文件来控制该服务的大部分行为。其默认设置通常是非常保守的，但我倾向于做一些调整，以优化我的 SSH 体验，并保护我的服务器不被非法访问。1、改变默认端口这是一个并非所有管理员都记得的问题。任何有端口扫描器的人都可以发现一个 SSH 端口，即使你之后把它移到别的端口，所以你很难把自己从危险中移除，但这样却会有效的避免了数百个针对你的服务器扫描的不成熟脚本。这是一个可以让你省心，从你的日志中减去大量的噪音的操作。在写这篇文章时，我在一个云服务提供商上设置了一个 SSH 服务器，默认端口 TCP 22，每分钟平均被攻击次数为 24 次。在将端口改为一个更高的数字，即 TCP 45678 后，平均每天有两个连接并用各种用户名或密码进行猜测。要改变 SSH 的默认端口，在你喜欢的文本编辑器中打开 /etc/ssh/sshd_config，将 Port 的值从 22 改为大于 1024 的某个数字。这一行可能被注释了，因为 22 是默认的（所以不需要在配置中明确声明），所以在保存之前取消注释。Port 22122 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: 一旦你改变了端口并保存了文件，重新启动 SSH 服务器：$ sudo systemctl restart sshd 2、不要使用密码现在有一个普遍的潮流是停止使用密码作为认证手段，双因素认证等方法越来越受欢迎。OpenSSH 可以使用非对称密钥进行认证，因此不需要记住复杂的密码，更不需要每隔几个月轮换一次密码，也不需要担心有人在你建立远程会话时进行“肩后偷窥”。使用 SSH 密钥可以让你快速、安全地登录到你的远程设备上。这往往意味着花费在错误的用户名和密码上的时间更少。登录令人愉快的简单。当没有密钥时，就没有入口，甚至没有提示符。要使用这个功能，你必须同时配置客户机（在你面前的计算机）和服务器（远程机器）。在客户端机器上，你必须生成一个 SSH 密钥对。这包括一个公钥和一个私钥。正如它们的名字所暗示的，一个公开的密钥是供你分发给你想登录的服务器的，另一个是私人的密钥，必须不与任何人分享。使用 ssh-keygen 命令可以创建一个新的密钥对，并使用 -t 选项来指定一个好的、最新的密码学库，如 ed25519：$ ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (~/.ssh/id_ed25519): 在密钥创建过程中，你会被提示为文件命名。你可以按回车键来接受默认值。如果你将来创建了更多的密钥，你可以给每个密钥起一个自定义的名字，但有多个密钥意味着你要为每次交互指定使用哪个密钥，所以现在只要接受默认即可。你还可以给你的密钥一个口令。这可以确保即使别人设法获得你的私钥（这本身就不应该发生），没有你的口令，他们也无法将其投入使用。这对某些密钥来说是一种有用的保护措施，而对其他密钥来说则不合适（特别是那些用于脚本的密钥）。按回车键让你的密钥没有口令，或者你选择创建一个口令。要把你的密钥复制到服务器上，使用 ssh-copy-id 命令。例如，如果我拥有一台名为 example.com 的服务器，那么我可以用这个命令把我的公钥复制到它上面：$ ssh-copy-id jgarrido@example.com 这将在服务器的 .ssh 目录下创建或修改 authorized_keys 文件，其中包含你的公钥。一旦确认 ssh-co…

Linux 远程连接之 SSH 新手指南
type: item
date: 2021-08-28T18:54:16+08:00
description: 学会使用安全外壳协议连接远程计算机。使用 Linux，你只需要在键盘上输入命令，就可以巧妙地使用计算机（甚至这台计算机可以在世界上任何地方），这正是 Linux 最吸引人的特性之一。有了 OpenSSH，POSIX 用户就可以在有权限连接的计算机上打开安全外壳协议，然后远程使用。这对于许多 Linux 用户来说可能不过是日常任务，但从没操作过的人可能就会感到很困惑。本文介绍了如何配置两台计算机的 安全外壳协议 secure shell （简称 SSH）连接，以及如何在没有密码的情况下安全地从一台计算机连接到另一台计算机。相关术语在讨论多台计算机时，如何将不同计算机彼此区分开可能会让人头疼。IT 社区拥有完善的术语来描述计算机联网的过程。 服务 service ： 服务是指在后台运行的软件，因此它不会局限于仅供安装它的计算机使用。例如，Web 服务器通常托管着 Web 共享 服务。该术语暗含（但非绝对）它是没有图形界面的软件。 主机 host ： 主机可以是任何计算机。在 IT 中，任何计算机都可以称为 主机，因为从技术上讲，任何计算机都可以 托管 host 对其他计算机有用的应用程序。你可能不会把自己的笔记本电脑视为 主机，但其实上面可能正运行着一些对你、你的手机或其他计算机有用的服务。 本地 local ： 本地计算机是指用户或某些特定软件正在使用的计算机。例如，每台计算机都会把自己称为 localhost。 远程 remote ： 远程计算机是指你既没在其面前，也没有在实际使用的计算机，是真正意义上在 远程 位置的计算机。现在术语已经明确好，我们可以开始了。在每台主机上激活 SSH要通过 SSH 连接两台计算机，每个主机都必须安装 SSH。SSH 有两个组成部分：本地计算机上使用的用于启动连接的命令，以及用于接收连接请求的 服务器。有些计算机可能已经安装好了 SSH 的一个或两个部分。验证 SSH 是否完全安装的命令因系统而异，因此最简单的验证方法是查阅相关配置文件：$ file /etc/ssh/ssh_config /etc/ssh/ssh_config: ASCII text 如果返回 No such file or directory 错误，说明没有安装 SSH 命令。SSH 服务的检测与此类似（注意文件名中的 d）：$ file /etc/ssh/sshd_config /etc/ssh/sshd_config: ASCII text 根据缺失情况选择安装两个组件：$ sudo dnf install openssh-clients openssh-server 在远程计算机上，使用 systemd 命令启用 SSH 服务：$ sudo systemctl enable --now sshd 你也可以在 GNOME 上的 系统设置 或 macOS 上的 系统首选项 中启用 SSH 服务。在 GNOME 桌面上，该设置位于 共享 面板中：开启安全外壳协议现在你已经在远程计算机上安装并启用了 SSH，可以尝试使用密码登录作为测试。要访问远程计算机，你需要有用户帐户和密码。远程用户不必与本地用户相同。只要拥有相应用户的密码，你就可以在远程机器上以任何用户的身份登录。例如，我在我的工作计算机上的用户是 sethkenlon ，但在我的个人计算机上是 seth。如果我正在使用我的个人计算机（即作为当前的本地计算机），并且想通过 SSH 连接到我的工作计算机，我可以通过将自己标识为 sethkenlon 并使用我的工作密码来实现连接。要通过 SSH 连接到远程计算机，你必须知道其 IP 地址或可解析的主机名。在远程计算机上使用 ip 命令可以查看该机器的 IP 地址：$ ip addr show | grep "inet " inet 127.0.0.1/8 scope host lo inet 10.1.1.5/27 brd 10.1.1.31 [...] 如果远程计算机没有 ip 命令，可以尝试使用 ifconfig 命令（甚至可以试试 Windows 上通用的 ipconfig 命令）。127.0.0.1 是一个特殊的地址，它实际上是 localhost 的地址。这是一个 环回 loopback 地址，系统使用它来找到自己。这在登录远程计算机时并没有什么用，因此在此示例中，远程计算机的正确 IP 地址为 10.1.1.5。在现实生活中，我的本地网络正在使用 10.1.1.0 子网，进而可得知前述正确的 IP 地址。如果远程计算机在不同的网络上，那么 IP 地址几乎可能是任何地址（但绝不会是 127.0.0.1），并且可能需要一些特殊的路由才能通过各种防火墙到达远程。如果你的远程计算机在同一个网络上，但想要访问比自己的网…

三种 Linux 下的 SSH 图形界面工具
type: item
date: 2021-01-13T23:12:54+08:00
description: 在你作为 Linux 系统管理员的职业生涯中，你可以使用 Secure Shell（SSH）远程访问 Linux 服务器或桌面系统。很有可能，你已经使用过了。在某些情况下，你会通过 SSH 一次性登录多个 Linux 服务器。实际上，SSH 很可能是 Linux 工具箱中最常用的工具之一。因此，你会希望操作尽可能高效。对于许多系统管理员来说，没有什么比命令行更有效的了。但是，有些用户确实更喜欢 GUI 工具，尤其是从一台桌面台式机远程连接到服务器上工作时。如果你碰巧喜欢 GUI 工具，那么你肯定想了解一下 Linux 上的一些出色的 SSH 图形界面工具。将其与独特的终端窗口相结合，可以从同一窗口远程访问多台计算机，你便拥有了高效工作所需的一切。让我们看以下这三个工具，找出其中一个（或多个）是否完全适合你的需求。我将在 Elementary OS 上演示这些工具，但是大多数流行的发行版都可以使用它们。PuTTY只要是久经沙场的人都知道 PuTTY。 实际上，PuTTY 是从 Windows 环境通过 SSH 连接到 Linux 服务器的事实标准工具。但是 PuTTY 不仅适用于 Windows。实际上，从其标准存储库中，PuTTY 也可以安装到 Linux 上。 PuTTY 的功能列表包括：保存会话通过 IP 地址或主机名链接定义备用 SSH 端口链接类型定义日志记录键盘、响铃、外观、连接等选项本地和远程隧道配置支持代理支持X11 隧道PuTTY GUI 主要是一种保存 SSH 会话的方式，因此，你可以更轻松地管理那些你需要不断远程登录、登出的各种 Linux 服务器和桌面台式机。从 PuTTY 连接到 Linux 服务器后，你将拥有一个可以运行的终端窗口。此时，你可能会问自己，为什么不只在终端窗口中工作？对于某些人来说，保存会话的便捷性确实使 PuTTY 值得使用。在 Linux 上安装 PuTTY 很简单。例如，你可以在基于 Debian 的发行版上执行命令：sudo apt-get install -y putty 安装后，你可以从桌面菜单运行 PuTTY GUI 或执行命令 putty。在“ PuTTY 配置 PuTTY Configuration ” 窗口（图 1）中，在 “ 主机名（或 IP 地址） HostName (or IP address) ”位置键入主机名或 IP 地址，配置 端口 Port ”（如果不是默认值 22），从“ 连接类型 Connection type ”中选择 “SSH” ，然后单击“ 打开 Open ”。图 1：PuTTY 连接配置窗口。建立连接后，系统将提示你输入远程服务器上的用户凭据（图 2）。图 2：使用 PuTTY 登录到远程服务器。要保存会话（以便不必总是键入远程服务器信息），填写 IP 地址（或主机名），配置端口和连接类型，然后（在单击 “ 打开 Open ” 之前），在 “ 保存会话 Saved Sessions ” 顶部文本区域中键入链接的名称，然后单击 “ 保存 Save ”。 这样将保存此会话的配置。若要连接到已保存的会话，请从 “ 已保存的会话 Saved Sessions ” 窗口中选择它，单击 “ 加载 Load ”，然后单击 “ 打开 Open ”。 然后，系统将提示你输入远程服务器上的远程凭据登录远程服务器。EasySSH尽管 EasySSH 没有提供 PuTTY 中提供的大量配置选项，但是（顾名思义）它非常易于使用。 EasySSH 的最佳功能之一是提供标签式界面，因此你可以打开多个 SSH 连接并在它们之间快速切换。 EasySSH 的功能包括：分组（你可以将选项卡分组以获得更高效的体验）。保存用户名/密码。外观选项。支持本地和远程隧道。在 Linux 桌面上安装 EasySSH 很简单，因为可以通过 flatpak 安装该应用程序（这意味着你必须在系统上安装 Flatpak ）。 安装 flatpak 后，使用以下命令添加 EasySSH ：sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo sudo flatpak install flathub com.github.muriloventuroso.easyssh 使用以下命令运行 EasySSH ：flatpak run com.github.muriloventuroso.easyssh 你可以在其中单击左上角的 “+” 按钮打开 EasySSH 应用程序。 在出现的窗口（图 3）中，根据需要配置 SSH 连接。图 3：在 EasySSH 中添加连接很简单。添加连…

使用开源工具 nccm 管理 SSH 连接
type: item
date: 2020-09-20T07:40:33+08:00
description: 使用 nccm 让你的终端连接 SSH 会话更快、更稳、更轻松。OpenSSH 很常用，但没有一个知名的连接管理器，因此我开发了 ncurses SSH 连接管理器（nccm）来填补这个重要的空白。 nccm 是一个简单的 SSH 连接管理器，具有非常便于移植的终端界面（就如项目名称所示，使用 ncurses 编写）。最重要的是，它使用起来非常简单。有了 nccm，你可以花费最少的精力和最少的按键连接到你选择的 SSH 会话。安装 nccm最快的方式是从它的 Git 仓库克隆该项目：$ git clone https://github.com/flyingrhinonz/nccm nccm.git 在 nccm.git/nccm 的文件夹中有两个文件：nccm 自身和 nccm.yml 配置文件。首先将 nccm 脚本复制到系统目录 /usr/local/bin/ 中并添加执行权限，也可以通过使用install 命令来完成操作：$ sudo install -m755 nccm –target-directory /usr/local/bin 文件 nccm.yml 可以拷贝到以下任意一个位置，默认从找到的第一个位置获取配置:~/.config/nccm/nccm.yml~/.nccm.yml~/nccm.yml/etc/nccm.ymlnccm 需要在 Python 3 的环境中运行，这在大部分的 Linux 环境是没问题的。大多数 Python 库的依赖包已经作为 Python 3 的一部分存在，但是，有一些 YAML 的依赖包和实用程序是你必须安装的。如果你没有安装 pip，你可以使用包管理器来安装它。在安装的同时，也请安装 yamllint 应用程序来帮助你验证 nccm.yml 文件。在 Debian 或类似系统使用 apt 命令：$ sudo apt install python3-pip yamllint 在 Fedora 或者类似系统使用 dnf 命令：$ sudo dnf install python3-pip yamllint PyYAML 也是必须安装的，可以通过使用 pip 来安装：$ pip3 install --user PyYAML 使用 nccm开始之前，需要修改 nccm.yml 文件来添加 SSH 连接配置，可以参照示例文件格式化 YAML 文件。仿照示例文件在开头添加连接名称，配置项使用两个空格缩进。不要忘了冒号（:），这是 YAML 的语言的格式。不要担心你的 SSH 会话信息以何顺序排列，因为 nccm 在程序内提供了排序的方式。如果修改完成，可以使用 yamllint 来校验配置：$ yamllint ~/.config/nccm/nccm.yml 如果没有错误信息返回，说明文件的内容格式是正确的，可以进行下面的步骤。如果 nccm 可以从你的路径中找到并且可以执行，那么输入 nccm 就可以启动 TUI（文本用户界面）了。如果你看到 Python 3 抛出的异常，请检查依赖包是否正确安装，任何异常都应该提到缺少的依赖包。只要你没有在 YAML 配置文件中更改 ncm_config_control 模式，那么你可以使用以下的键盘按键来控制：Up/Down 方向键 - 移动光标Home/End - 跳转到文件开始和结尾PgUp/PgDn - 以页为单位查看Left/Right 方向键 - 水平滚动TAB - 在文本框之间移动回车 - 连接选中的 SSH 会话Ctrl-h - 显示帮助菜单Ctrl-q/Ctrl-c - 退出F1-F5 或 ! @ # $ % - 按 1-5 列排序使用 F1 到 F5 来按 1-5 列排序，如果你的设备占用了这些 F1 - F5 键，你可以使用! @ # $ % 来替代。默认界面显示 4 列内容，但我们将用户名和服务器地址作为单独的列来排序，这样我们就有了 5 个排序方式。你也可以通过再次按下排序的按键来逆转排序。在选中的行上按回车可以建立会话。在 Filter 文本框中输入过滤内容，会用输入的内容以“与”的关系来过滤输出内容。这是不区分大小写的，而条目间用空白分隔。在 Conn 部分也是如此，但在这里按回车键可以连接到那个特定的条目编号。这个工具还有许多功能需要你去发掘，比如专注模式，这些部分留下等待你去探索，也可以查看项目主页或者内置的帮助文档查看更多细节内容。项目的 YAML 配置文件的文档是完善的，所以你可以查阅修改使 nccm 使用起来更加顺手。nccm 项目是非常希望得到你的反馈的，所以你可以复刻该项目然后添加更多新功能，欢迎大家提出拉取请求。使用 nccm 来放松连接 SSH 的压力像我一样，我希望这个工具可以对你有用，感谢能够为开源工作增…

借助 HTTP 通过 SSH 绕过 Linux 防火墙
type: item
date: 2020-08-11T07:18:39+08:00
description: 需要远程工作的看一下。使用这个有用的开源解决方案，从任何地方快速地连接和访问你的所有设备。随着对连接和远程工作的需求的增长，访问远程计算资源变得越来越重要。但是，提供对设备和硬件的外部访问的要求使此任务变得复杂而有风险。旨在减少此类麻烦的 ShellHub 是一个云服务器，允许从任何外部网络常规访问这些设备。ShellHub 是一个 Apache 2.0 许可的开源解决方案，它可满足所有这些需求，并允许用户通过一个帐户连接和管理多个设备。它的开发是为了方便开发者和程序员的工作，使得任何硬件架构的 Linux 设备的远程访问成为可能。仔细观察，ShellHub 方案使用 HTTP 传输层来封装 SSH 协议。这种传输层的选择可以在大多数网络上无缝使用，因为大多数公司的防火墙规则和策略通常都可以使用并接受它。下面这些示例使用 2020 年 6 月 10 日发布的 ShellHub 版本 0.3.2。使用 ShellHub要访问该平台，只需进入 shellhub.io 并注册一个自己的帐户。你的注册数据将帮助开发团队了解用户资料并提供有关如何改进平台的更多信息。图 1：shellhub.io 中的注册表格ShellHub 有直观、简洁的界面，这让所有的信息和功能都能以最快的方式呈现。注册后，你会看到一块仪表板，这时可以注册你的第一台设备。添加设备要启用通过 ShellHub 连接设备，你需要生成一个标识符，它用于在设备连接到服务器时对你的设备进行身份验证。此标识必须配置在代理（ShellHub 客户端）内部，该代理必须与镜像一起保存在设备中，或者必须添加为 Docker 容器。ShellHub 默认使用 Docker 运行代理，这非常方便，因为它在现有系统上提供了一种无痛的添加方式，支持 Docker 是唯一的要求。要添加设备，你需要粘贴命令行，它显示在 ShellHub Cloud 的对话框中（请参见图 2）。图 2：将设备添加到 ShellHub Cloud设备默认使用它的 MAC 地址作为其主机名。在内部，该设备由其密钥标识，这是在设备注册期间生成的，用于与服务器进行身份验证。访问设备要访问你的设备，只需进入仪表板中的“查看所有设备”，或单击左侧菜单上的“设备”。这将列出你所有已注册的设备。设备状态可在页面上轻松看到。在线设备旁边会显示一个绿色图标，可以单击终端图标进行连接。你接着输入密码，最后单击”连接“按钮，请参见（图 3）。图 3：使用网络上的终端访问设备另一种访问设备的方法是从类似 PuTTY、Termius 之类的 SSH 客户端，甚至 Linux 终端访问。我们可以使用称为 SSHID 的 ShellHub 标识作为连接的目的地址（例如 ssh username@SSHID）。图 4 说明了如何使用在终端中使用 Linux SSH 客户端连接到我们的计算机。图 4：使用 Linux 终端连接到设备无论你何时登录 ShellHub Cloud 平台，你都可以访问仪表板上的所有已注册设备，这样你可以随时随地访问它们。ShellHub 通过一个开源平台，以透明的方式为您与远程机器保持通信安全的过程增加了简单性。在 GitHub 上加入 ShellHub 社区，或随时通过 Gitter 或通过电子邮件 contato@ossystems.com.br 向开发团队发送你的建议或反馈。我们很乐意收到社区成员的贡献！via: https://opensource.com/article/20/7/linux-shellhub作者：Domarys 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

如何使用 Squid 配置 SSH 代理服务器
type: item
date: 2020-08-02T00:28:00+08:00
description: 有时你无法从本地连接到 SSH 服务器。还有时，你可能想为 SSH 连接添加额外的安全层。在这些情况下，通过代理服务器连接到 SSH 服务器是一种解决方式。Squid 是提供缓存和代理服务的全功能代理服务器应用。它通常用于在浏览过程中重用和缓存以前请求的网页来帮助缩短响应时间并减少网络带宽。但是在本篇中，你将配置 Squid 作为 SSH 代理服务器，因为它是强大的受信任代理服务器，易于配置。安装和配置使用 sudo 安装 squid 软件包：$ sudo dnf install squid -y squid 配置文件非常庞大，但是我们只需要配置其中一些。Squid 使用访问控制列表来管理连接。编辑 /etc/squid/squid.conf 文件，确保你有下面解释的两行。首先，指定你的本地 IP 网络。默认配置文件已经列出了最常用的，但是如果没有，你需要添加你的配置。例如，如果你的本地 IP 网络范围是 192.168.1.X，那么这行会是这样：acl localnet src 192.168.1.0/24 接下来，添加以下行，将 SSH 端口添加为安全端口：acl Safe_ports port 22 保存该文件。现在启用并重启 squid 代理服务：$ sudo systemctl enable squid $ sudo systemctl restart squid squid 代理默认监听 3128 端口。配置 firewalld 允许此服务：$ sudo firewall-cmd --add-service=squid --perm $ sudo firewall-cmd --reload 测试 ssh 代理连接要通过 ssh 代理服务器连接到服务器，我们将使用 netcat。如果尚未安装 nmap-ncat，请安装它：$ sudo dnf install nmap-ncat -y 这是标准 ssh 连接示例：$ ssh user@example.com 这是使用 squid 代理服务器作为网关连接到该服务器的方式。此示例假定 squid 代理服务器的 IP 地址为 192.168.1.63。你还可以使用 squid 代理服务器的主机名或 FQDN：$ ssh user@example.com -o "ProxyCommand nc --proxy 192.168.1.63:3128 %h %p" 以下是这些选项的含义：ProxyCommand – 告诉 ssh 使用代理命令。nc – 用于建立与代理服务器连接的命令。这是 netcat 命令。%h – 代理服务器的主机名或 IP 地址的占位符。%p – 代理服务器端口号的占位符。有很多方法可以配置 SSH 代理服务器，但这是入门​​的简单方法。via: https://fedoramagazine.org/configure-ssh-proxy-server/作者：Curt Warfield 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出