SSH 通信器

原文


通信器(Communicators) 是 Packer 用来向创建的机器上上传文件、执行脚本等的机制。

SSH 通信器通过使用 SSH 协议来执行此操作。它是大多数构建器的默认通信器。

如果您在运行 Packer 的主机上配置了 SSH Agent,并且在通信器配置中启用了 SSH Agent 身份验证,则 Packer 会自动将 SSH Agent 转发到远程主机。

使用 SSH 通信器的准备

SSH 通信器是大多数构建器的默认通信器,不是所有的构建器都可以做到"开箱即用"的。

如果您正在一台从云镜像创建的主机(例如,在 Amazon 主机上构建)上,您的云提供商很可能已经为您在镜像上预配置了 SSH,这意味着您所要做的就是在 Packer 中配置通信器模板。

但是,如果您是正在一台全新且未配置的操作系统镜像创建的机器上运行构建,您几乎总是必须执行一些额外的工作来在用户操作系统上配置 SSH。对于大多数操作系统发行版,这项工作将由一个引导命令执行,该命令引用一个文件,该文件为您在安装操作系统时会代为应答有关安装选项的交互式提问。该文件的名称因操作系统而异;一些常见的示例是 Debian 所需的 "preseed" 文件、CentOS 所需的 "kickstart" 文件或 Windows 所需的 "answer file",也称为 "Autounattend.xml" 文件。为简单起见,我们将在文档的其余部分将此文件称为"preseed"文件。

如果您不熟悉如何使用 preseed 文件自动引导镜像,请查看 HashiCorp 的镜像引导快速指南,或研究特定用户操作系统的自动配置。了解如何自动初始化操作系统对于成功使用 Packer 至关重要。

SSH 通信器

SSH 通信器通过 SSH 连接到主机。如果您在运行 Packer 的主机上配置了 SSH Agent,并且在通信器配置中启用了 SSH Agent 身份验证,则 Packer 会自动将 SSH Agent 转发到远程主机。

SSH 通信器有以下选项:

  • ssh_host (string) - SSH 连接的地址。这通常由构建器自动配置。
  • ssh_port (int) - SSH 连接 的端口。默认为 22
  • ssh_username (string) - 用于连接 SSH 的用户名。如果使用 SSH,则必须填写。
  • ssh_password(string)- 用于通过 SSH 进行身份验证的密码明文。
  • ssh_ciphers ([]string) - 该参数会覆盖 Go 默认提供的加密算法。默认值为 [ "aes128-gcm@openssh.com", "chacha20-poly1305@openssh.com", "aes128-ctr", "aes192-ctr", "aes256-ctr", ] 加密算法的有效选项包括:["aes128-ctr"、"aes192-ctr"、"aes256-ctr"、"aes128-gcm@openssh.com"、"chacha20-poly1305@openssh.com"、"arcfour256"、"arcfour128" ", "arcfour", "aes128-cbc", "3des-cbc", ]
  • ssh_clear_authorized_keys (bool) - 如果为 true,Packer 将尝试从 ~/.ssh/authorized_keys/root/.ssh/authorized_keys 中删除其临时密钥。这主要是一个象征性的选项,因为无论是否设置为 true,Packer 都会从主机系统中删除临时私钥(除非用户设置了 -debug 标志)。默认为 false;目前仅适用于安装了 sed 的主机。
  • ssh_key_exchange_algorithms ([]string) - 如果设置,Packer 将覆盖 Go 提供的默认密钥交换 (kex) 算法的值。可接受的值包括:"curve25519-sha256@libssh.org"、"ecdh-sha2-nistp256"、"ecdh-sha2-nistp384"、"ecdh-sha2-nistp521"、"diffie-hellman-group14-sha1" 和 " diffie-hellman-group1-sha1"。
  • ssh_certificate_file(string)- 用于通过 SSH 进行身份验证的用户证书的路径。可以在路径中使用 ~,作为当前用户的 home 目录展开。
  • ssh_pty (bool) - 如果为 true,将为 SSH 连接请求 PTY。默认为 false
  • ssh_timeout (duration string | ex: "1h5m2s") - 等待 SSH 可用的时间。 Packer 使用它来确定机器何时启动,因此这通常很长。示例值:10m
  • ssh_disable_agent_forwarding (bool) - 如果为 true,将禁用 SSH Agent 转发。默认为 false
  • ssh_handshake_attempts (int) - 一旦可以连接,尝试使用 SSH 的握手次数。默认为 10
  • ssh_bastion_host(string)- 用于 SSH 实际连接的堡垒主机。
  • ssh_bastion_port (int) - 堡垒主机的端口。默认为 22。
  • ssh_bastion_agent_auth (bool) - 如果为 true,则本地 SSH Agent 将用于和堡垒主机进行身份验证。默认为 false
  • ssh_bastion_username(string)- 连接堡垒主机的用户名。
  • ssh_bastion_password(string)- 用于向堡垒主机进行身份验证的密码。
  • ssh_bastion_interactive (bool) - 如果为 true,则用键盘输入交互来与堡垒主机进行身份验证。
  • ssh_bastion_private_key_file(string)- 用于与堡垒主机进行身份验证的 PEM 编码私钥文件的路径。 可以在路径中使用 ~,作为当前用户的 home 目录展开。
  • ssh_bastion_certificate_file(string)- 用于与堡垒主机进行身份验证的用户证书的路径。可以在路径中使用 ~,作为当前用户的 home 目录展开。
  • ssh_file_transfer_method (string) - scpsftp - 如何传输文件,使用 scp(默认)或 SSH 文件传输协议。
  • ssh_proxy_host (string) - 用于 SSH 连接的 SOCKS 代理主机
  • ssh_proxy_port (int) - SOCKS 代理的端口。默认为 1080
  • ssh_proxy_username(string)- 用于使用代理服务器进行身份验证的可选用户名。
  • ssh_proxy_password(string)- 用于向代理服务器进行身份验证的可选密码。
  • ssh_keep_alive_interval (duration string | ex: "1h5m2s") - 向服务器发送 "keep alive" 消息的频率。设置为负值 ("-1s") 以禁用。示例值:"10s"。默认为 "5s"
  • ssh_read_write_timeout (duration string | ex: "1h5m2s") - 等待远程命令结束的时间量。有时这可能很有用,比如如果 Packer 程序在连接重启后挂死在连接上。示例:"5m"。默认情况下禁用。
  • ssh_remote_tunnels ([]string) -
  • ssh_local_tunnels ([]string) -

请注意:SSH 通信器选项:ssh_keypair_namessh_agent_authtemporary_key_pair_namessh_private_key_file 并非被所有构建器支持。请查看构建器特定文档以了解其他 SSH 支持的选项。

SSH 通信器的细节

Packer 只会使用一种身份验证方法,要么使用 publickey,要么使用 ssh_password,Packer 提供两种发送密码的方式: passwordkeyboard-interactive。换句话说,Packer 将无法搭配使用 AuthenticationMethods 配置了多个配置的身份验证方法的 sshd 一起工作。

Packer 支持以下 MAC:

  • hmac-sha1
  • hmac-sha1-96
  • hmac-sha2-256
  • hmac-sha2-256-etm@openssh.com

results matching ""

    No results matching ""