SSH 小技巧

本文总结了我们更有效地使用 SSH 的最佳实践。了解如何:

  • 为 SSH 登录添加第二重验证
  • 使用代理转发是安全的
  • 退出现有的 SSH 会话
  • 保持终端窗口常开
  • 与朋友共享远程终端会话(无需 Zoom!)

为 SSH 添加第二重验证因素

有五种不同的方法可以为 SSH 连接添加第二个身份验证因素:

  1. 更新您的 OpenSSH 并使用加密密钥。2020 年 2 月,OpenSSH 新增了对 FIDO U2F(通用第二因素)加密密钥的支持。这是一项很棒的新功能,但需要注意的是:只有更新到 OpenSSH 8.2 或更高版本的客户端和服务器才能使用加密密钥,因为 2 月的更新引入了新的密钥类型。请使用以下命令。 ssh –V 您可以使用以下命令检查 SSH 客户端版本和服务器版本。 nc [servername] 22

    二月份的版本新增了两种密钥类型——ecdsa-sk 和 ed25519-sk(以及相应的证书)。要生成密钥文件,只需粘贴您的加密密钥并运行以下命令:
    $ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk

    它会生成公钥和私钥,并将它们绑定到您的 U2F 设备。U2F 设备上的私钥用于在加密密钥激活时解密磁盘上的私钥描述符。

    此外,您还可以为密钥提供口令作为辅助验证因素。

    驻留密钥是 OpenSSH 支持的另一种 -sk 密钥生成方法。这种方法将描述符存储在 U2F 设备上,允许您在需要时使用加密密钥访问它。您可以使用以下命令创建驻留密钥:

    $ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk

    然后,要将描述符返回到新设备的内存中,请插入加密密钥并运行以下命令:

    $ ssh-add -K

    连接到主机时,您仍然需要激活加密密钥。

  2. 使用 PIV+PKCS11 和 Yubikey。使用加密密钥连接到早期版本的 SSHD 设备需要不同的方法。Yubico 提供了一份关于将 U2F+SSH 与 PIV/PKCS11 结合使用的指南。这与 FIDO U2F 不同,虽然也能工作,但要理解其背后的原理需要更多一些时间。
  3. 使用自定义的 yubikey-agent SSH 代理。Filippo Valsorda 为 Yubikey 编写了一个 SSH 代理。它是全新的,功能也比较基础。
  4. 使用 Touch ID 和 Sekey。Sekey 是一款开源的 SSH 代理,它将密钥存储在 Mac 上的安全区域中,并启用 Touch ID 进行访问。
  5. 使用单点登录 SSH。我写了一篇教程来帮助您进行设置。单点登录 SSH 的优势之一是能够强制执行身份提供商的安全策略,包括支持多因素身份验证 (MFA)。

安全使用代理转发

在 SSH 中,代理转发允许远程主机访问本地设备的 SSH 代理。启用代理转发后(通常通过 `ssh -A` 命令),SSH 连接将包含两个通道:交互式会话通道和代理转发通道。本地 SSH 代理创建的 Unix 套接字通过此通道连接到远程主机。这种方法存在风险,因为远程设备上的 root 用户可以访问本地 SSH 代理,并可能在网络上冒充您。使用 OpenSSH 套件中的标准 SSH 代理,您甚至不会察觉到这种情况的发生。拥有 U2F 密钥(或 Sekey)可以帮助您有效地阻止任何从外部访问 SSH 代理的尝试。

即使采取了这种预防措施,最好还是尽量少用代理转发。不要在每个会话中都使用代理转发——只有在确定当前会话确实需要时才使用。

退出冻结的会话

网络中断、程序行为失控或控制序列阻止键盘输入,都是导致 SSH 会话终止的可能原因。

有几种方法可以结束冻结的会话:

  1. 网络中断时自动注销。将以下内容添加到您的 .ssh/config 文件中:
    ServerAliveInterval 5
    ServerAliveCountMax 1

    SSH 会每隔 ServerAliveInterval 秒向远程主机发送一次回显请求以检查连接。如果超过 ServerAliveCountMax 次回显请求仍未收到响应,SSH 将使连接超时并退出会话。

  2. 退出会话。ssh 默认使用 ~(波浪号)字符作为转义字符。~. 命令会关闭当前连接并返回终端。(转义序列只能在新行输入。)~? 命令会显示当前会话中所有可用命令的完整列表。请注意,在国际键盘上输入 ~ 字符时,您可能需要按两次 ~ 键。

为什么会出现会议冻结的情况? 互联网诞生之初,计算机很少移动。但当你使用笔记本电脑并在多个 IPv4 WiFi 网络之间切换时,你的 IP 地址就会发生变化。由于 SSH 依赖于 TCP 连接,而 TCP 连接又依赖于具有稳定 IP 地址的端点,因此每次切换网络时,SSH 连接都会丢失套接字描述符,实际上相当于断开了连接。当 IP 地址发生变化时,网络协议栈需要时间来检测到描述符的丢失。当网络出现问题时,我们不希望 TCP 连接中的任何节点过早终止连接。因此,协议会多次重试发送数据,直到最终放弃。与此同时,在你的终端中,会话看起来会卡住。IPv6 添加了一些与移动性相关的功能,允许设备在切换网络时保持其归属地址。或许有一天,这将不再是一个问题。

如何在远程主机上保持终端持久打开状态

在不同的网络之间切换或想要暂时断开连接时,有两种不同的方法来保持连接。

1. 利用优势 MOSH или 永恒的终点站

如果您确实需要一个即使在网络切换时也不会断开的连接,请使用 Mosh 移动 shell。它是一个安全 shell,首先使用 SSH 握手,然后在会话期间切换到其自身的加密通道。这样,Mosh 就创建了一个独立的、高度可靠的安全通道,可以抵御网络中断、笔记本电脑 IP 地址变更、严重的网络故障等等,这一切都归功于 UDP 连接的强大功能以及 Mosh 使用的同步协议。

要使用 Mosh,您需要在客户端和服务器上都安装它,并开放 60000-61000 端口,允许非通信 UDP 流量访问您的远程主机。之后,您只需要使用 mosh user@server.

Mosh 在屏幕和按键层面进行操作,这使其比 SSH 具有诸多优势。SSH 在客户端和服务器之间转发标准输入/输出的二进制流。如果我们只需要同步屏幕和按键,那么之后重新建立断开的连接就容易得多。SSH 会缓存并发送所有发生的情况,而 Mosh 只缓存按键,并将终端窗口的最后一帧与客户端同步。

2. 使用 tmux

如果您想要“随意来去”并在远程主机上保持终端会话,请使用 终端复用器 tmux我非常喜欢 tmux,而且经常使用它。如果你的 SSH 连接中断了,要恢复到你的 tmux 会话,只需重新连接并输入以下命令即可。 tmux attach它还具有一些很棒的功能,例如终端内的标签页和面板(类似于 iOS 终端中的标签页和面板),以及与他人共享终端的功能。

有些人喜欢用 Byobu 来美化他们的 tmux,Byobu 是一个可以显著提升 tmux 易用性并添加许多键盘快捷键的软件包。Byobu 自带…… Ubuntu而且通过 Homebrew 很容易在 Mac 上安装。

与朋友共享远程终端会话

有时在调试服务器上的复杂问题时,您可能需要与不在同一房间的人员共享 SSH 会话。tmux 正是完成这项任务的理想选择!只需几个步骤即可:

  1. 请确保堡垒节点或您计划使用的任何服务器上都已安装 tmux。
  2. 你们两人都需要使用同一个账户通过 SSH 连接到设备。
  3. 你们其中一人必须启动 tmux 才能启动 tmux 会话。
  4. 另一个应该运行 tmux attach
  5. 瞧!您现在拥有一个共享终端。

如果您想要更复杂的多用户 tmux 会话,请尝试 tmate,它是 tmux 的一个分支,可以更轻松地共享终端会话。

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster