通过 SSH 安装 Arch Linux

来自 ArchWiki

本文旨在向用户展示如何通过 SSH 连接远程安装 Arch。当主机位于远程位置,或者您希望使用 SSH 客户端的复制/粘贴功能进行 Arch 安装时,请考虑此方法。

在远程(目标)机器上

注意: 这些步骤需要物理访问机器。如果主机位于其他地方,则可能需要与其他人协调。

按照 安装指南#预安装 中的步骤操作,直到包括 连接到互联网(可以跳过设置控制台键盘布局和字体)。

此时,设置所需的 root 密码以允许 SSH 连接,因为 root 的默认 Arch 密码为空

# passwd

确认 /etc/ssh/sshd_config 中已设置 PermitRootLogin yes。如果未设置,请设置它并重新加载 OpenSSH 守护程序 sshd.service 以应用更改。

注意: 如果目标机器位于 NAT 路由器之后,并且您需要外部访问,则需要将 SSH 端口(默认为 22)转发到目标机器的 LAN IP 地址。或者,您可以设置反向 SSH 隧道到您的本地(客户端)机器,并通过它连接回来,请参阅 ssh(1)-R 标志。

在本地机器上

在本地机器上,使用以下命令通过 SSH 连接到目标机器

$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@ip.address.of.target
注意: -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 选项将阻止验证并将实时环境的 SSH 主机密钥写入 ~/.ssh/known_hosts。如果您以前连接到该 IP 地址,这将避免 REMOTE HOST IDENTIFICATION HAS CHANGED 警告。
提示: 如果两台机器都在同一本地网络上,则可以使用 mDNS 主机名 archiso.local 代替目标的 IP 地址
$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@archiso.local

从这里,您将看到实时环境的欢迎消息,并且能够像坐在物理键盘前一样管理目标机器。此时,如果目的是仅从实时介质安装 Arch,请从 安装指南#更新系统时钟 继续。如果目的是编辑已损坏的现有 Linux 安装,请按照 从现有 Linux 安装 wiki 文章操作。

提示: 考虑在目标机器上使用 GNU Screentmux(两者在实时环境中都可用),这样,如果您断开连接,您可以重新连接到多路复用器的会话。

在无头服务器上安装

本文或章节是与 Cloud-init#Archiso 合并的候选对象。

注意: 这里描述的过程完全依赖于 cloud-init,并且很好地说明了它的用途,因此它应该被合并并从那里链接。(在 Talk:Install Arch Linux via SSH 中讨论)
注意: 这些步骤可能需要物理访问无头机器。必须有人插入安装介质并启动无头服务器。

本节描述了在没有键盘、鼠标或显示器的无头服务器上安装 Arch Linux。它使用带有 cloud-init NoCloud 配置的额外驱动器来自动配置 OpenSSH 授权密钥,并可选地配置 iwd 连接。

准备 cloud-init 配置文件

有三个必需的 cloud-init 配置文件:meta-datauser-datanetwork-config

meta-data 文件可以为空

$ printf "" > meta-data

user-data 将包含相关配置

user-data
#cloud-config
users:
  - name: root
    ssh_authorized_keys:
      - ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      - ssh-ed25519 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 替换为您的公钥 SSH 密钥。要添加多个密钥,只需重复上述语句即可。

要自动连接到 Wi-Fi 网络,请使用 write_files: 语句在正确的目录中创建 iwd 网络配置文件。例如

user-data
#cloud-config
users:
  - name: root
    ssh_authorized_keys:
      - ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      - ssh-ed25519 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

write_files:
- content: |
    [Security]
    PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
  path: /var/lib/iwd/spaceship.psk

runcmd:
- systemctl restart iwd.service

cloud-init 创建的网络配置与 ISO 中提供的配置不同。即,mDNS 响应器和 DHCPv6 客户端未启用。为避免这种情况,请在 network-config 中禁用 cloud-init 的网络配置

network-config
version: 2
config: disabled

创建所有三个文件后,需要将它们放置在带有 ISO 9660 或 FAT 卷且标签为 CIDATA 的驱动器上。

使用额外的 FAT 格式化驱动器

使用 FAT 格式化驱动器。将 meta-datauser-datanetwork-config 复制到驱动器,并将文件系统的 LABEL 更改为 CIDATA

您将需要将此驱动器附加到无头机器,以及包含官方 ISO 的驱动器。

使用额外的 ISO

使用 libisoburn 中的 xorriso 创建 cloud-init.iso 文件

$ xorrisofs -output cloud-init.iso -volid CIDATA -joliet -rational-rock meta-data user-data network-config

通过将 cloud-init.iso 刻录到光盘来准备 cloud-init 数据介质,或者,如果部署选项允许,则按原样使用 ISO。

使用单个 USB 闪存驱动器

如果安装映像写入到例如 USB 闪存驱动器,前提是驱动器上有足够的空间,则可以创建额外的分区来容纳 cloud-init 数据。

安装 dosfstoolsmtoolslibisoburn

首先创建一个 2 MiB FAT 映像,其 LABEL 设置为 CIDATA

$ mkfs.fat -C -n CIDATA cloud-init.img 2048

meta-datauser-data 文件复制到其根目录

$ mcopy -i cloud-init.img meta-data user-data network-config ::

重新打包官方 ISO 以包含 FAT 映像作为第三个分区

$ xorriso -indev archlinux-version-x86_64.iso -outdev archlinux-version-x86_64-with-cidata.iso -append_partition 3 0x0c cloud-init.img -boot_image any replay

最后,按照 USB 闪存安装介质#按原样使用 ISO(BIOS 和 UEFI) 使用重新打包的 ISO (archlinux-version-x86_64-with-cidata.iso) 准备 USB 闪存驱动器安装介质。

使用单个自定义构建的 ISO

或者,使用 Archiso 创建自定义 ISO。这允许仅使用一个驱动器,无论类型如何。

使用 releng 配置文件作为基础。将 cloud-init 配置文件 放在 airootfs/var/lib/cloud/seed/nocloud/ 中,并构建 ISO。

从安装介质启动

完成后,使用适当的方法将安装介质和 cloud-init 数据介质(如果它是单独的)部署到无头机器。

启动无头机器,并从安装介质启动到 Arch 实时环境。等待一分钟左右,让无头机器有时间启动并连接到网络。

从您现有的机器(带有键盘和显示器)SSH 进入无头服务器上的 Arch 实时环境,并按照 安装指南 中的描述完成安装。

注意: 为了强调显而易见的事实,在引导映像中执行的所有 Wi-Fi 和 SSH 配置都需要在实际的 Arch Linux 安装中再次完成,以便在安装后允许 Wi-Fi SSH 访问无头机器。