查看源代码 ssh_file (ssh v5.2.5)
ssh 应用程序中客户端和服务器数据库操作的默认回调模块
此模块是客户端和服务器用户以及主机“数据库”操作的默认回调处理程序。所有数据(例如密钥对)都存储在普通文件系统中的文件中。此页面记录了这些文件、它们的存储位置以及此回调模块的配置选项。
目的是与 OpenSSH 在文件中的存储兼容。因此,它模仿 OpenSSH 的目录和文件名。
Ssh_file 实现了 ssh_server_key_api
和 ssh_client_key_api
。这允许用户使用例如数据库处理程序创建自己的接口。
可以通过在启动客户端或服务器时设置选项 key_cb
来使用另一个这样的回调模块(例如,使用 ssh:connect、ssh:daemon 或 ssh:shell)。
注意
这些函数是 SSH 应用程序的回调。它们不打算从用户代码中调用!
文件、目录及其使用者
守护进程
守护进程使用存储在 SYSDIR 目录中的所有文件。
可选地,在 publickey
授权的情况下,使用 USERDIR 目录中的一个或多个远程用户的公钥。请参阅文件 USERDIR/authorized_keys
和 USERDIR/authorized_keys2
。
客户端
客户端使用存储在 USERDIR 目录中的所有文件。
目录内容
-
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 选项。
-
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_rsa
- 私有 rsa 用户密钥(可选)id_ecdsa
- 私有 ecdsa 用户密钥(可选)id_ed25519
- 用于曲线 25519 的私有 eddsa 用户密钥(可选)id_ed448
- 用于曲线 448 的私有 eddsa 用户密钥(可选)
可以使用 OpenSSH 的 ssh-keygen 命令生成密钥文件。
USERDIR 的默认值为
/home/
LOCALUSER
/.ssh
。要更改 USERDIR,请参阅 user_dir 选项
摘要
类型:选项
函数
-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。
选项
文件
-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 文件二进制。
如果 Type
为 public_key
,则二进制可以是 RFC4716 公钥或 OpenSSH 公钥。
注意
openssh_key_v1
格式的实现仍然是实验性的。
-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
格式的实现仍然是实验性的。
-spec extract_public_key(PrivKey) -> PubKey when PrivKey :: public_key:private_key(), PubKey :: public_key:public_key().
从私钥中提取公钥。
-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 描述。
选项
文件
-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 描述。
选项
文件
此函数在读取这些文件时会丢弃这些文件行开头的全部选项。
-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。
选项
文件
-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)未实现。
文件