跳至内容

OpenSSH/实用程序

100% developed
来自维基教科书,开放世界中的开放书籍
ssh-agent(1) - 一个可以存储私钥的认证代理。
ssh-add(1) - 用于添加或删除上述代理的密钥的工具。
ssh-keygen(1) - 一个密钥生成工具。
ssh-keyscan(1) - 用于从多个主机收集公钥的工具。
ssh-copy-id(1) - 将公钥安装到远程机器的 authorized_keys 注册表中。
ssh-vulnkey(1) - 检查密钥是否在受损密钥黑名单中

ssh-agent

[编辑 | 编辑源代码]

ssh-agent(1) 是一种工具,用于在内存中保存私钥以便在会话期间重复使用。通常它是在会话开始时启动的,后续窗口或程序作为代理的客户端运行。环境变量 SSH_AUTH_SOCK 指示应用程序与代理通信的套接字。

ssh-add(1) 是一种工具,用于将密钥身份加载到代理中以便重复使用。它也可以用于从代理中删除身份。代理保存用于身份验证的私钥。

ssh-keyscan

[编辑 | 编辑源代码]

ssh-keyscan(1) 自 OpenSSH 版本 2.5.1 以来一直是 OpenSSH 套件的一部分,用于检索公钥。使用 ssh-keyscan(1) 或任何其他方法检索到的密钥必须通过检查密钥指纹来验证,以确保密钥的真实性并降低中间人攻击的可能性。默认情况下是使用 SSH 协议 2 请求 ECDSA 密钥。David Mazieres 编写了 ssh-keyscan(1) 的初始版本,Wayne Davison 添加了对 SSH 协议版本 2 的支持。

ssh-keygen

[编辑 | 编辑源代码]

ssh-keygen(1) 用于生成用于身份验证的密钥对或证书,更新和管理密钥,或验证密钥指纹。它与 SSH 密钥一起工作,可以执行以下操作

  • 生成新的密钥对,可以是 ECDSA、Ed25519、RSA、ECDSA-SK 或 Ed25519-SK。
  • 从已知主机中删除密钥
  • 从私钥重新生成公钥
  • 更改私钥的密码短语
  • 更改私钥的注释文本
  • 显示特定公钥的指纹
  • 显示特定公钥的 ASCII 艺术指纹
  • 如果读卡器可用,则将密钥加载到智能卡或从智能卡读取密钥

如果使用旧协议 SSH1,则 ssh-keygen(1) 只能生成 RSA 密钥。但是,SSH1 已经过时很久,如果发现正在使用,则应重新调整系统。此外,虽然可以生成 DSA 密钥,但它们已过时,如果发现应予以替换。

密钥指纹的一个重要用途是在首次连接到机器时。指纹是公钥的哈希或摘要。指纹可以在带外传输并提前加载到 ~/.ssh/known_hosts/etc/ssh/ssh_known_hosts 文件中,以便在第一次连接之前完成。密钥的验证数据应在带外发送。它可以通过邮寄、传真、短信或电话提前发送,或者以其他方式以某种方式进行沟通,以便您可以确信它是真实且未经更改的。

$ ssh -l fred zaxxon.example.org
The authenticity of host 'zaxxon.example.org (203.0.113.114)' can't be established.
RSA key fingerprint is SHA256:DnCHntWa4jeadiUWLUPGg9FDTAopFPR0c5TgjU/iXfw.
Are you sure you want to continue connecting (yes/no)?

如果您看到该消息并且密钥的指纹与您提前收到的指纹匹配,则连接可能正常。如果您看到该消息并且密钥的指纹与您提前收到的指纹不同,则停止并断开连接,并通过电话或 VoIP 进行联系以解决错误。一旦 SSH 客户端从服务器接受了密钥,它就会保存在 known_hosts 中。

$ ssh -l fred galaga.example.org
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:QIWi4La8svQSf5ZYow8wBHN4tF0jtRlkIaLCUQRlxRI.
Please contact your system administrator.
Add correct host key in /home/fred/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/fred/.ssh/known_hosts:1
ECDSA host key for galaga.example.org has changed and you have requested strict checking.
Host key verification failed.

如果您开始连接到已知主机,并且收到类似上面的错误,则要么第一次连接是到冒名顶替者,要么当前连接是到冒名顶替者,要么机器上进行了非常愚蠢的操作。无论如何,请断开连接,不要尝试登录。通过带外联系系统管理员以找出正在发生的事情。[1] 可能服务器已重新安装,无论是整个操作系统还是只是 OpenSSH 服务器,都没有保存旧密钥。这会导致生成新的密钥并解释它们的存在。无论哪种情况,请在连接之前与系统管理员确认。

可以使用 -Fknown_hosts 中查找哈希主机名和地址。或者,可以使用 -R 删除它们。

$ ssh-keygen -F sftp.example.org -f ~/.ssh/known_hosts
# Host sftp.example.org found: line 7 type RSA
|1|slYCk3msDPyGQ8l0lq82IbUTzBU=|KN7HPqVnJHOFX5LFmTXS6skjK4o= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA3cqqA6fZtgexZ7+4wxoLN1+YDvPfBtt4/m+N/RI8o95CXqvqZMIQjuVarVKjwRwt9pTJIVzf6bwjcNkrUx9dQqZNpNBkcvBRdmd775opWCAfkHEueKxkNx3Kb1yitz0dUaFkRwfTsXAjh+NleBq2ofAfjowu/zzCnnbAKy2R2OE=

ssh-copy-id

[编辑 | 编辑源代码]

ssh-copy-id 包含在一些发行版中,用于将公钥安装到远程机器的 authorized_keys 文件中。它是一个简单的 shell 脚本,第一次登录后仍应手动检查 authorized_keys 文件,以验证一切正常,并且密钥按预期复制。

ssh-vulnkey

[编辑 | 编辑源代码]

ssh-vulnkey 包含在一些 GNU/Linux 发行版的某些版本中,用于检查密钥是否在受损密钥黑名单中。黑名单是在一些发行版分发了一个损坏的 OpenSSL 版本[2]时变得必要的,导致生成易于预测和受损的错误密钥。在使用该损坏版本期间生成的密钥如果发现已受损,则无法修复,必须替换。这个问题已经修复,新的密钥应该没问题。


参考文献

[编辑 | 编辑源代码]
  1. Brian Hatch (2004). "SSH 主机密钥保护". SecurityFocus. 检索于 2013-04-14.
  2. Jake Edge (2008). "Debian 漏洞影响广泛". LWN. 检索于 2013-04-14.

 

华夏公益教科书