Ssh証明書を使用してsshホストキーを認証する環境があります。 ssh-keygen -s /path/to/ca -h ...
を実行して作成される証明書の種類について話しています。これらの証明書も有効期間を指定して作成され、有効期限がいつになるかが示されます。これらの証明書は、十分に長く使用されており、有効期限が近づき始めたらすぐに確認できるように、監視を開始する必要があります。
いずれにせよ、ログインせずにリモート接続を行うことができ、どういうわけか有効期間がaltで表示されます。証明書をダウンロードしますか? ssh -vvv
を実行しても、必要な情報が表示されません。 ssh-keyscan
も証明書を認識しているようには見えません。おそらく、私が十分に詳しく調べていないライブラリがいくつかありますか?
最悪の場合、ローカルで実行され、ssh-keygen -L -f
の出力を解析する監視プラグインをいつでも作成できます。それでも、リモートスキャンは本当に好ましいアプローチのように感じます。
これは可能ですが、ツールのサポートが不足しています。 SSHプロトコルを十分に話すライブラリを見つけたので、完全なsshログインなしでホスト証明書valid_beforetimeを抽出するツールを作成できました。これが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
でポイントします。 )
残念ながら、私はオープンソースツールを知りません。 nmapは [〜#〜] nse [〜#〜] スクリプトでなんとかしてそれを取得できるようです(ただし、微調整が必要です-/ usr/share/nmap/scriptsを確認してください)。
SSHの Tectia SSH サーバーには、証明書を取得するssh-fetchkeyと呼ばれるツールが含まれており、ssh-certviewを使用して詳細を表示できます。
答えは「それは不可能」だと思います。少なくとも私が見つけた方法ではありませんが、opensshクライアントまたはpython用のparamiko SSHライブラリを使用しています。 SSHDで使用されているキーが証明書の有効期間を確認したばかりのキーであることを確認する、より簡単なリモートチェックと組み合わせた、ローカルチェックをお勧めします。