Ssh

如何編寫腳本檢查 known_hosts 文件中的密鑰是否正確

  • January 28, 2022

我想在腳本中實現一個函式,該函式檢查與 known_hosts 文件中給定主機對應的密鑰是否正確。顯而易見的方法是嘗試 ssh 連接並解析它是否會導致 known_hosts 警告。由於以下原因,這是次優的:

  • 如果主機不在know_hosts 文件中,則需要單獨檢查
  • 它依賴於可能會更改的警告的特定措辭
  • 它在您不需要執行的目標伺服器上為您執行一個 ssh 命令,並且可能由於不同的原因(例如指定的登錄 shell)而失敗
  • 需要有效的憑據

我試圖找到可能用於該檢查的選項ssh-keyscanssh-keygen命令,但沒有找到它們。

進行此檢查的最簡單方法是什麼?

#!/usr/bin/env bash

HOST=$1

set -o pipefail

HOST_KEY_LINE=$(ssh-keygen -F "$HOST" | tail -n1)

if [ $? -ne 0 ]; then
 echo "$HOST is not in the known_hosts file"
 exit 1
fi

KEY_TYPE=$(echo "$HOST_KEY_LINE" | awk '{ print $2 }')
HOST_KEY=$(echo "$HOST_KEY_LINE" | awk '{ print $3 }')

ACTUAL_KEY=$(ssh-keyscan -t "$KEY_TYPE" "$HOST" 2>&1 | tail -n1 | awk '{ print $3 }')

if [ $? -ne 0 ]; then
 echo "Could not get key from $HOST: $ACTUAL_KEY"
 exit 1
fi

if [ "$HOST_KEY" = "$ACTUAL_KEY" ]; then
 echo "known_hosts has a correct key"
 exit 0
fi

echo "known_hosts has an incorrect key"

引用自:https://serverfault.com/questions/1091427