Ssh
如何編寫腳本檢查 known_hosts 文件中的密鑰是否正確
我想在腳本中實現一個函式,該函式檢查與 known_hosts 文件中給定主機對應的密鑰是否正確。顯而易見的方法是嘗試 ssh 連接並解析它是否會導致 known_hosts 警告。由於以下原因,這是次優的:
- 如果主機不在know_hosts 文件中,則需要單獨檢查
- 它依賴於可能會更改的警告的特定措辭
- 它在您不需要執行的目標伺服器上為您執行一個 ssh 命令,並且可能由於不同的原因(例如指定的登錄 shell)而失敗
- 需要有效的憑據
我試圖找到可能用於該檢查的選項
ssh-keyscan
和ssh-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"