<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/rss/stylesheet/" type="text/xsl"?>
<rss xmlns:content='http://purl.org/rss/1.0/modules/content/' xmlns:taxo='http://purl.org/rss/1.0/modules/taxonomy/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:itunes='http://www.itunes.com/dtds/podcast-1.0.dtd' xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0" xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:podbridge='http://www.podbridge.com/podbridge-ad.dtd' version='2.0'>
<channel>
  <title>奇诺分享 | blog.ccino.cc - 重在分享</title>
  <language>zh-cn</language>
  <generator>microfeed.org</generator>
  <itunes:type>episodic</itunes:type>
  <itunes:explicit>false</itunes:explicit>
  <atom:link rel="self" href="https://blog-ccino-cc.pages.dev/rss/" type="application/rss+xml"/>
  <link>https://blog.ccino.cc</link>
  <itunes:author>奇诺分享</itunes:author>
  <itunes:image href="https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/images/channel-6ebae07c242a357bee27d74ca3e4b3ce.png"/>
  <image>
    <title>奇诺分享 | blog.ccino.cc - 重在分享</title>
    <url>https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/images/channel-6ebae07c242a357bee27d74ca3e4b3ce.png</url>
    <link>https://blog.ccino.cc</link>
  </image>
  <copyright>©2024</copyright>
  <item>
    <title>使用 Cloudflare ZeroTrust 搭建 WebSSH</title>
    <guid>BXU1zEmNsAr</guid>
    <pubDate>Wed, 02 Oct 2024 06:36:35 GMT</pubDate>
    <itunes:explicit>false</itunes:explicit>
    <description>
      <![CDATA[<p><a href="https://zikin.org/" rel="noopener noreferrer" target="_blank">Zikin</a>&nbsp;在《<a href="https://zikin.org/protection-ssh-with-cloudflare-zero-trust/" rel="noopener noreferrer" target="_blank">使用 Cloudflare Zero Trust 保护 SSH</a>》一文中介绍了如何使用 Cloudflare ZeroTrust 保护 SSH 的方法，同时也提供了&nbsp;<a href="https://zikin.org/cloudflare-zero-trust/" rel="noopener noreferrer" target="_blank">对于网页的保护方法</a>。本文主要补充使用 Cloudflare SSH CA 替代 SSH 公钥的使用方法，以及在部署实践中值得注意的地方。</p><p>使用 Cloudflare SSH CA 替代 SSH 公钥，可以使用 GitHub 账户或其他 OpenID Connect 方式登录您的服务器 SSH，而无需私钥或 SSH 密码。这样可以避免私钥泄漏、忘记携带私钥，对于团队统一管理多个服务器、多个用户、分配不同的服务器权限也十分有用。</p><p>由于此方法也无需在 Cloudflare WebSSH 界面输入私钥或密码，对于不信任 Cloudflare 传输私钥的场景，也可以使用此方法。</p><h2><strong>部署中的注意事项</strong></h2><ol><li>对于非 HTTP 应用，Tunnel 需要占用整个域名——不能将 WebSSH 部署在子路径下。</li><li>对于多个服务器部署，不可以将多个服务器连接到同一个 Tunnel。需要为每个服务器创建单独的 Tunnel。</li><li>对于多个服务器部署，不可以多个域名共用一个 Application。</li><li>不可用使用四级及以上域名（如&nbsp;server.ssh.example.com）。Cloudflare 不会为四级及以上域名签发 SSL 证书。必须使用三级域名（如&nbsp;server-ssh.example.com）。</li><li>对于 Arch Linux，删除 Tunnel 之后需要执行&nbsp;rm /etc/systemd/system/cloudflared*&nbsp;删除残留的服务文件。</li><li>即是使用 Passkey 登录 GitHub 来通过 Cloudflare ZeroTrust 认证，Cloudflare 依然不认为登录方式为&nbsp;fido2——除非您使用付费的登录管理平台（如 Okta、Duo 等）。因此请不要在登录策略中添加登录方式为&nbsp;fido2&nbsp;的要求。</li><li>您的邮箱前缀（如&nbsp;luotianyi@example.com&nbsp;的前缀是&nbsp;luotianyi）必须与您的 Linux 用户名相同。否则 Cloudflare ZeroTrust 认证会失败。</li></ol><h2><strong>将服务器连接到 Cloudflare Tunnel</strong></h2><p>此部分的操作可参照 Zikin 的&nbsp;<a href="https://zikin.org/protection-ssh-with-cloudflare-zero-trust/" rel="noopener noreferrer" target="_blank">使用 Cloudflare Zero Trust 保护 SSH</a>。鉴于 Cloudflare ZeroTrust 控制台有所变化，此处做一定的简述。</p><p>操作步骤如下：</p><ol><li>打开&nbsp;<a href="https://one.dash.cloudflare.com/" rel="noopener noreferrer" target="_blank">Cloudflare ZeroTrust 控制台</a>。</li><li>左侧侧边栏选择&nbsp;<strong>Access</strong>&nbsp;-&gt;&nbsp;<strong>Tunnels</strong>。点击按钮&nbsp;<strong>Create a tunnel</strong>。</li><li>按照 Cloudflare 的提示，在服务器上安装 Cloudflare Tunnel。</li></ol><ul><li class="ql-indent-1">对于 Arch Linux，可以直接使用命令&nbsp;pacman -S cloudflared&nbsp;安装并使用命令&nbsp;cloudflared service install &lt;token&gt;&nbsp;安装。</li></ul><ol><li>在&nbsp;<em>Add public hostname for</em>&nbsp;页面，设置用于 WebSSH 的子域名。</li></ol><ul><li class="ql-indent-1"><strong>Service</strong>&nbsp;部分&nbsp;<strong>Type</strong>&nbsp;选择 SSH</li><li><strong>Service</strong>&nbsp;部分&nbsp;<strong>URL</strong>&nbsp;填写&nbsp;127.0.0.1:22，其中&nbsp;22&nbsp;为 SSH 服务的端口号</li><li class="ql-indent-1">完成 Tunnel 的创建。</li></ul><ol><li>左侧边栏选择&nbsp;<strong>Access</strong>&nbsp;-&gt;&nbsp;<strong>Applications</strong>。点击按钮&nbsp;<strong>Create an application</strong>。</li><li><strong>Select Type</strong>&nbsp;页面：类型选择 Self-hosted，进入下一页。</li><li><strong>Configure App</strong>&nbsp;页面：</li></ol><ul><li class="ql-indent-1"><strong>Application Name</strong>&nbsp;随便选择</li><li class="ql-indent-1"><strong>Application Domain</strong>&nbsp;设置为刚刚填写的、用于 WebSSH 的子域名</li></ul><ol><li><strong>Add Policy</strong>&nbsp;页面：</li></ol><ul><li class="ql-indent-1"><strong>Policy Name</strong>&nbsp;随便选择</li><li><strong>Configure Rules</strong></li><li class="ql-indent-2"><strong>Selector</strong>&nbsp;选择&nbsp;<strong>Emails</strong></li><li class="ql-indent-1"><strong>Value</strong>&nbsp;填写你自己的电子邮箱（如果您使用 GitHub 登录，应该填写你的 GitHub Primary Email）</li></ul><ol><li><strong>Setup</strong>&nbsp;页面</li></ol><ul><li class="ql-indent-1">在&nbsp;<strong>Additional settings</strong>&nbsp;中选择&nbsp;<strong>Enable automatic cloudflared authentication</strong></li><li class="ql-indent-1">开启&nbsp;<strong>Browser rendering</strong></li></ul><p><strong>注意本文和引用 Zikin 文章中的不同之处</strong></p><p>在&nbsp;<strong>Add Policy</strong>&nbsp;页面，如果您希望统一管理自己的多个账号，或多个组织中的不同账号，请参见 Zikin 文中的方法创建 Group。如果您的 WebSSH 仅供自己使用、且验证方式唯一，使用本文的方法可以简化操作。</p><p><img src="https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/media/rich-editor/items/BXU1zEmNsAr/image-a400dad8614db24d24e9dbbce6c7d122.jpg"></p><p>Add Policy 页面的 Configure Rules 配置</p><p>在&nbsp;<strong>Setup</strong>&nbsp;页面，对于&nbsp;<strong>Enable automatic cloudflared authentication</strong>&nbsp;配置：</p><ul><li>如果不需要 Cloudflare SSH CA 管理 SSH 认证（不自动登录 SSH），则与 Zikin 文章中保持一致，不打开此项目</li><li>如果需要 Cloudflare SSH CA 管理 SSH 认证（自动登录 SSH），则需要打开此项目</li></ul><p><img src="https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/media/rich-editor/items/BXU1zEmNsAr/image-ce6455e902569ff399bf8e0578bb73d9.jpg"></p><p>Setup 页面的配置</p><h2><strong>配置 Cloudflare SSH CA</strong></h2><p>在完成上述配置后，便可以创建 Cloudflare SSH CA 并配置认证。</p><p>操作步骤如下：</p><ol><li>打开&nbsp;<a href="https://one.dash.cloudflare.com/" rel="noopener noreferrer" target="_blank">Cloudflare ZeroTrust 控制台</a></li><li>左侧侧边栏选择&nbsp;<strong>Access</strong>&nbsp;-&gt;&nbsp;<strong>Service Auth</strong>。</li><li>在上方 Tab 选择栏中，选择&nbsp;<strong>SSH</strong></li><li>在&nbsp;<strong>Application</strong>&nbsp;下拉菜单，选择前一节中创建的 Application。</li></ol><p><img src="https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/media/rich-editor/items/BXU1zEmNsAr/image-0f4841cd998604c025d7a553533ec74a.jpg"></p><p>为 Application 创建 SSH CA</p><p>5.点击&nbsp;<strong>Generate Certificate</strong>&nbsp;按钮，生成 SSH CA。</p><p>6.生成成功后，在下方会看到已经生成 SSH CA 的 Application 列表。点击 Application 的名称，复制弹出窗口中的 Public Key。此 Public Key 即为 SSH CA 公钥。</p><p><img src="https://cdn-blog-ccino-cc.ccino.cc/blog-ccino-cc/production/media/rich-editor/items/BXU1zEmNsAr/image-aaedc1d1e17919660d690d5168b1313a.jpg"></p><p>复制 SSH CA 公钥</p><h2><strong>配置服务器</strong></h2><p>登录服务器，编辑&nbsp;/etc/ssh/sshd_config。确保您已经开启了&nbsp;PubkeyAuthentication：</p><pre class="ql-syntax" spellcheck="false">PubkeyAuthentication yes
</pre><p>同时，配置 Cloudflare SSH CA 的路径：</p><pre class="ql-syntax" spellcheck="false">TrustedUserCAKeys /etc/ssh/cloudflare-ca.pub
</pre><p>然后，将您在上一步中复制的 SSH CA 公钥保存到&nbsp;/etc/ssh/cloudflare-ca.pub。您可以修改 Cloudflare SSH CA 的存放路径，只要保证&nbsp;sshd&nbsp;有访问权限即可。</p><p>然后，重新启动 SSH 服务：</p><pre class="ql-syntax" spellcheck="false">systemctl restart sshd
</pre><ul><li><em>注：不同发行版的 SSH 服务名称可能不同，可能为&nbsp;ssh、sshd、openssh-server&nbsp;或其他名称。对于不使用 Systemd 的发行版，请参考其手册或文档。</em></li></ul><p>此时打开您设置的 WebSSH 域名，即可看到 Cloudflare ZeroTrust 的登录界面。登录后，无需输入私钥或密码，即可访问您的服务器 Shell。</p><h2><strong>Cloudlfare 相关的文档</strong></h2><ol><li>Cloudflare 社区上对于多个服务器连接到同一个 Tunnel 的讨论：<a href="https://community.cloudflare.com/t/multiple-ssh-servers-under-same-tunnel-name/420170" rel="noopener noreferrer" target="_blank">Multiple SSH servers under same tunnel name?</a></li><li>Cloudflare 文档：<a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/" rel="noopener noreferrer" target="_blank">SSH</a></li><li>Cloudflare 文档：<a href="https://developers.cloudflare.com/cloudflare-one/identity/users/short-lived-certificates/" rel="noopener noreferrer" target="_blank">Configure short-lived certificates</a></li></ol>]]>
    </description>
    <link>https://blog.ccino.cc/cloudflare-webssh-zerotrust</link>
    <itunes:episodeType>full</itunes:episodeType>
    <enclosure url="https://josephcz.xyz/technology/network/cloudflare-webssh-zerotrust/" type="text/html"/>
  </item>
</channel>
</rss>