查看源代码 ssh_file (ssh v5.2.5)

ssh 应用程序中客户端和服务器数据库操作的默认回调模块

此模块是客户端和服务器用户以及主机“数据库”操作的默认回调处理程序。所有数据(例如密钥对)都存储在普通文件系统中的文件中。此页面记录了这些文件、它们的存储位置以及此回调模块的配置选项。

目的是与 OpenSSH 在文件中的存储兼容。因此,它模仿 OpenSSH 的目录和文件名。

Ssh_file 实现了 ssh_server_key_apissh_client_key_api。这允许用户使用例如数据库处理程序创建自己的接口。

可以通过在启动客户端或服务器时设置选项 key_cb 来使用另一个这样的回调模块(例如,使用 ssh:connectssh:daemonssh:shell)。

注意

这些函数是 SSH 应用程序的回调。它们不打算从用户代码中调用!

文件、目录及其使用者

守护进程

守护进程使用存储在 SYSDIR 目录中的所有文件。

可选地,在 publickey 授权的情况下,使用 USERDIR 目录中的一个或多个远程用户的公钥。请参阅文件 USERDIR/authorized_keysUSERDIR/authorized_keys2

客户端

客户端使用存储在 USERDIR 目录中的所有文件。

目录内容

  • LOCALUSER
    运行 Erlang 虚拟机(模拟器)的操作系统进程的用户名。

  • SYSDIR
    这是保存服务器文件的目录

    • ssh_host_dsa_key - 私有 dss 主机密钥(可选)
    • ssh_host_rsa_key - 私有 rsa 主机密钥(可选)
    • ssh_host_ecdsa_key - 私有 ecdsa 主机密钥(可选)
    • ssh_host_ed25519_key - 用于曲线 25519 的私有 eddsa 主机密钥(可选)
    • ssh_host_ed448_key - 用于曲线 448 的私有 eddsa 主机密钥(可选)

    可以使用 OpenSSH 的 ssh-keygen 命令生成密钥文件。

    必须至少定义一个主机密钥。SYSDIR 的默认值为 /etc/ssh

    出于安全原因,此目录通常仅对 root 用户可访问。

    要更改 SYSDIR,请参阅 system_dir 选项。

  • USERDIR
    这是保存文件的目录

    • authorized_keys 和作为第二种选择 authorized_keys2 - 用户的公钥串联存储在这些文件之一中。

      它由 OpenSSH 的行组成

      (options)? keytype base64-encoded-key comment

      其中

      options :: option(,option)*
      option :: % All options are skipped
      keytype :: 'ssh-dsa'
               | 'ssh-rsa'
               | 'ssh-ecdsa-nistp256'
           | 'ssh-ecdsa-nistp384'
               | 'ssh-ecdsa-nistp521'
               | 'ssh-ed25519'
           | 'ssh-ed448'
      base64-encoded-key :: % The user's public key
      comment :: % Comments are skipped
    • known_hosts - 来自访问过的主机的密钥串联。该文件由客户端创建和使用。

      它由 OpenSSH 的行组成

      (option)? pattern(,pattern)* keytype key (comment)?

      其中

      option :: '@revoked'
      pattern :: host | '[' host ']:' port
      host :: ip-address | hostname | '*'
      port :: portnumber | '*'
      keytype :: 'ssh-dsa'
               | 'ssh-rsa'
               | 'ssh-ecdsa-nistp256'
           | 'ssh-ecdsa-nistp384'
               | 'ssh-ecdsa-nistp521'
               | 'ssh-ed25519'
           | 'ssh-ed448'
      key :: % encoded key from eg ssh_host_*.pub
    • id_dsa - 私有 dss 用户密钥(可选)

    • id_rsa - 私有 rsa 用户密钥(可选)

    • id_ecdsa - 私有 ecdsa 用户密钥(可选)

    • id_ed25519 - 用于曲线 25519 的私有 eddsa 用户密钥(可选)

    • id_ed448 - 用于曲线 448 的私有 eddsa 用户密钥(可选)

    可以使用 OpenSSH 的 ssh-keygen 命令生成密钥文件。

    USERDIR 的默认值为 /home/LOCALUSER/.ssh

    要更改 USERDIR,请参阅 user_dir 选项

摘要

类型:选项

密钥表示形式

openssh_key_v1 格式的实验性实现类型。

通过设置 time 使大文件的处理速度更快,但这会占用更多内存。space 变体减少了内存需求,但时间消耗更高。

如果用户的 DSA、RSA 或 ECDSA 密钥受密码保护,则可以使用这些选项提供密码。

通过计算 user2dir 函数动态设置 用户目录

函数

解码 SSH 文件二进制。

将 SSH 文件条目(公钥和属性)列表编码为二进制。

从私钥中提取公钥。

类型:选项

此类型的链接

experimental_openssh_key_v1()

查看源代码 (自 OTP 21.2 起)
-type experimental_openssh_key_v1() :: [{key(), openssh_key_v1_attributes()}].
此类型的链接

key()

查看源代码 (自 OTP 21.2 起)

密钥表示形式

此类型的链接

openssh_key_v1_attributes()

查看源代码 (自 OTP 21.2 起)
-type openssh_key_v1_attributes() :: [{atom(), term()}].

openssh_key_v1 格式的实验性实现类型。

此类型的链接

optimize_key_lookup()

查看源代码 (自 OTP 21.2 起)
-type optimize_key_lookup() :: {optimize, time | space}.

通过设置 time 使大文件的处理速度更快,但这会占用更多内存。space 变体减少了内存需求,但时间消耗更高。

要设置它,请在 "ssh:connect/3ssh:daemon/2 或类似的启动 ssh 连接的函数调用中设置选项 {key_cb, {ssh_file, [{optimize,TimeOrSpace}]}

此类型的链接

pubkey_passphrase_client_options()

查看源代码 (自 OTP 21.2 起)
-type pubkey_passphrase_client_options() ::
          {dsa_pass_phrase, string()} | {rsa_pass_phrase, string()} | {ecdsa_pass_phrase, string()}.

如果用户的 DSA、RSA 或 ECDSA 密钥受密码保护,则可以使用这些选项提供密码。

请注意,EdDSA 密码短语(曲线 25519 和 448)未实现。

此类型的链接

system_dir_daemon_option()

查看源代码 (自 OTP 21.2 起)
-type system_dir_daemon_option() :: {system_dir, string()}.

设置 系统目录

此类型的链接

user2dir()

查看源代码 (自 OTP 21.2 起)
-type user2dir() :: fun((RemoteUserName :: string()) -> UserDir :: string()).

通过计算 user2dir 函数动态设置 用户目录

此类型的链接

user_dir_common_option()

查看源代码 (自 OTP 21.2 起)
-type user_dir_common_option() :: {user_dir, string()}.

设置 用户目录

此类型的链接

user_dir_fun_common_option()

查看源代码 (自 OTP 21.2 起)
-type user_dir_fun_common_option() :: {user_dir_fun, user2dir()}.

函数

此函数的链接

add_host_key(Host, Port, Key, Options)

查看源代码 (自 OTP 23.0 起)
-spec add_host_key(Host, Port, Key, Options) -> Result
                      when
                          Host ::
                              inet:ip_address() |
                              inet:hostname() |
                              [inet:ip_address() | inet:hostname()],
                          Port :: inet:port_number(),
                          Key :: public_key:public_key(),
                          Options :: ssh_client_key_api:client_key_cb_options(none()),
                          Result :: ok | {error, term()}.

类型和描述

请参阅 ssh_client_key_api, Module:add_host_key/4 中的 API 描述。

请注意,ssh_file 不再支持旧的替代方案 Module:add_host_key/3

选项

文件

此函数的链接

decode(SshBin, Type)

查看源代码 (自 OTP 24.0 起)
-spec decode(SshBin, Type) -> Decoded | {error, term()}
                when
                    SshBin :: binary(),
                    Type ::
                        ssh2_pubkey | public_key | openssh_key | rfc4716_key | openssh_key_v1 |
                        known_hosts | auth_keys,
                    Decoded ::
                        Decoded_ssh2_pubkey | Decoded_public | Decoded_openssh | Decoded_rfc4716 |
                        Decoded_openssh_key_v1 | Decoded_known_hosts | Decoded_auth_keys,
                    Decoded_ssh2_pubkey :: public_key:public_key(),
                    Decoded_public :: Decoded_rfc4716 | Decoded_openssh_key_v1 | Decoded_openssh,
                    Decoded_openssh :: [{public_key:public_key(), [{comment, string()}]}],
                    Decoded_rfc4716 :: [{key(), [{headers, Attrs}]}],
                    Decoded_openssh_key_v1 :: experimental_openssh_key_v1(),
                    Decoded_known_hosts ::
                        [{public_key:public_key(), [{comment, string()} | {hostnames, [string()]}]}],
                    Decoded_auth_keys ::
                        [{public_key:public_key(), [{comment, string()} | {options, [string()]}]}],
                    Attrs :: {Key :: string(), Value :: string()}.

解码 SSH 文件二进制。

如果 Typepublic_key,则二进制可以是 RFC4716 公钥或 OpenSSH 公钥。

注意

openssh_key_v1 格式的实现仍然是实验性的。

此函数的链接

encode(InData, Type)

查看源代码 (自 OTP 24.0 起)
-spec encode(InData, Type) -> binary() | {error, term()}
                when
                    Type ::
                        ssh2_pubkey | openssh_key | rfc4716_key | openssh_key_v1 | known_hosts |
                        auth_keys,
                    InData ::
                        InData_ssh2_pubkey | InData_openssh | InData_rfc4716 | InData_openssh_key_v1 |
                        InData_known_hosts | InData_auth_keys,
                    InData_ssh2_pubkey :: public_key:public_key(),
                    InData_openssh :: [{public_key:public_key(), [{comment, string()}]}],
                    InData_rfc4716 :: [{key(), [{headers, Attrs}]}],
                    InData_openssh_key_v1 :: experimental_openssh_key_v1(),
                    InData_known_hosts ::
                        [{public_key:public_key(), [{comment, string()} | {hostnames, [string()]}]}],
                    InData_auth_keys ::
                        [{public_key:public_key(), [{comment, string()} | {options, [string()]}]}],
                    Attrs :: {Key :: string(), Value :: string()}.

将 SSH 文件条目(公钥和属性)列表编码为二进制。

注意

openssh_key_v1 格式的实现仍然是实验性的。

此函数的链接

extract_public_key(PrivKey)

查看源代码 (自 OTP 25.0 起)
-spec extract_public_key(PrivKey) -> PubKey
                            when PrivKey :: public_key:private_key(), PubKey :: public_key:public_key().

从私钥中提取公钥。

此函数的链接

host_key(Algorithm, Options)

查看源代码 (自 OTP 21.2 起)
-spec host_key(Algorithm, Options) -> Result
                  when
                      Algorithm :: ssh:pubkey_alg(),
                      Result :: {ok, public_key:private_key()} | {error, term()},
                      Options :: ssh_server_key_api:daemon_key_cb_options(none()).

类型和描述

请参阅 ssh_server_key_api, Module:host_key/2 中的 API 描述。

选项

文件

此函数的链接

is_auth_key(Key, User, Options)

查看源代码 (自 OTP 21.2 起)
-spec is_auth_key(Key, User, Options) -> boolean()
                     when
                         Key :: public_key:public_key(),
                         User :: string(),
                         Options :: ssh_server_key_api:daemon_key_cb_options(optimize_key_lookup()).

类型和描述

请参阅 ssh_server_key_api: Module:is_auth_key/3 中的 API 描述。

选项

文件

此函数在读取这些文件时会丢弃这些文件行开头的全部选项。

此函数的链接

is_host_key(Key, Host, Port, Algorithm, Options)

查看源代码 (自 OTP 23.0 起)
-spec is_host_key(Key, Host, Port, Algorithm, Options) -> Result
                     when
                         Key :: public_key:public_key(),
                         Host ::
                             inet:ip_address() | inet:hostname() | [inet:ip_address() | inet:hostname()],
                         Port :: inet:port_number(),
                         Algorithm :: ssh:pubkey_alg(),
                         Options :: ssh_client_key_api:client_key_cb_options(optimize_key_lookup()),
                         Result :: boolean() | {error, term()}.

类型和描述

请参阅 ssh_client_key_api, Module:is_host_key/5 中的 API 描述。

请注意,ssh_file 不再支持旧的替代方案 Module:is_host_key/4

选项

文件

此函数的链接

user_key(Algorithm, Options)

查看源代码 (自 OTP 21.2 起)
-spec user_key(Algorithm, Options) -> Result
                  when
                      Algorithm :: ssh:pubkey_alg(),
                      Result :: {ok, public_key:private_key()} | {error, string()},
                      Options :: ssh_client_key_api:client_key_cb_options(none()).

类型和描述

请参阅 ssh_client_key_api, Module:user_key/2 中的 API 描述。

选项

请注意,EdDSA 密码短语(曲线 25519 和 448)未实现。

文件