AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 619979
Accepted
andol
andol
Asked: 2014-08-13 13:16:58 +0800 CST2014-08-13 13:16:58 +0800 CST 2014-08-13 13:16:58 +0800 CST

ssh主机密钥证书,远程查找有效期?

  • 772

我有一个使用 ssh 证书来验证 ssh 主机密钥的环境。我说的是通过运行创建的证书类型ssh-keygen -s /path/to/ca -h ...。这些证书也创建了一个有效间隔,说明它们何时到期。这些证书现在已经使用了足够长的时间,以至于我需要开始监视它们,以便在它们开始接近到期时提醒您。

任何方式我都可以在不登录的情况下进行远程连接,并且以某种方式获得显示的有效间隔。下载证书?运行ssh -vvv似乎没有显示我需要的信息。两者似乎都没有ssh-keyscan证书意识。也许是我没有仔细研究过的一些图书馆?

最坏的情况是我总是可以编写一个在本地运行并解析ssh-keygen -L -f. 尽管如此,远程扫描确实感觉是更可取的方法。

ssh
  • 3 3 个回答
  • 4876 Views

3 个回答

  • Voted
  1. Best Answer
    aecolley
    2014-08-18T09:29:43+08:002014-08-18T09:29:43+08:00

    这是可能的,但它缺乏工具支持。我找到了一个库,它可以很好地使用 SSH 协议,让我可以编写一个工具来提取主机证书 valid_before 时间,而无需完整的 ssh 登录。在这里,在 Go 语言中。我希望它有所帮助。

    package main
    
    import "golang.org/x/crypto/ssh"
    import "fmt"
    import "os"
    import "time"
    
    func ignoreCertChain(auth ssh.PublicKey, address string) bool {
        return true // Pretend all certificates are trusted.
    }
    
    var sawACert bool
    
    func examineCert(cert *ssh.Certificate) bool {
      expires := cert.ValidBefore
      var humanReadable string
      if expires >= ssh.CertTimeInfinity {
        humanReadable = "infinity"
      } else if expires < (1 << 63) {
        humanReadable = time.Unix(int64(expires), 0).Format(time.RFC3339)
      } else {
        humanReadable = "the distant future"
      }
      fmt.Println("Cert expires at time", expires, "(" + humanReadable + ")")
      sawACert = true
      return true  // Reject the cert, to force early connection close.
    }
    
    func main() {
      serverHostPort := os.Args[1]
      checker := &ssh.CertChecker{
        IsHostAuthority: ignoreCertChain,
        IsRevoked: examineCert,
      }
      config := &ssh.ClientConfig{
        User: "test-sshcertscan-not-a-real-login-attempt",
        Auth: []ssh.AuthMethod{
          ssh.Password(""),
        },
        HostKeyCallback: checker.CheckHostKey,
      }
      sawACert = false
      client, err := ssh.Dial("tcp", serverHostPort, config);
      if err != nil && !sawACert {
        panic(fmt.Sprint("Cannot connect to ", serverHostPort, ", error: ",
                         err.Error()))
      } else if client != nil {
        defer client.Close()
      }
    }
    

    (快速使用说明:安装Go,将上面看到的代码保存在 sshcertscan.go 中,运行go build sshcertscan.go,然后将其指向 examplehost 端口 22 上的 ssh 服务器./sshcertscan examplehost:22。)

    • 7
  2. Giovanni Tirloni
    2014-08-16T12:45:08+08:002014-08-16T12:45:08+08:00

    不幸的是,我不知道任何开源工具。似乎 nmap 可以使用NSE脚本以某种方式检索它(但需要一些调整——检查 /usr/share/nmap/scripts)。

    SSH 的Tectia SSH服务器包含一个名为 ssh-fetchkey 的工具,它将检索证书,然后您可以使用 ssh-certview 查看详细信息。

    • 1
  3. Dennis Kaarsemaker
    2014-08-16T05:52:54+08:002014-08-16T05:52:54+08:00

    恐怕答案是“那不可能”。至少我没有找到任何方式,使用 openssh 客户端或用于 python 的 paramiko SSH 库。我建议按照您的描述进行本地检查,并结合更简单的远程检查来验证 SSHD 使用的密钥是否是您刚刚检查其证书生命周期的密钥。

    • 0

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve