서버가 어떤 SSH 키를 허용하는지 확인하세요.

서버가 어떤 SSH 키를 허용하는지 확인하세요.

SSH 개인 키로 가득 찬 디렉토리가 있고 어떤 서버가 로그인하지 않고 어떤 키를 허용하는지 확인하고 싶습니다. ssh-add를 사용하여 인증 클라이언트에 ssh 키를 추가하거나 서버에 로그인하지 않고 이 작업을 수행하려면 어떻게 해야 합니까? SSH는 인증에 어떤 키를 사용해야 하는지 어떻게 알 수 있나요? 서버가 사용할 수 있는 키의 지문을 보내나요, 아니면 클라이언트가 모든 지문을 보내고 서버가 이를 확인합니까?

답변1

다음과 같은 것을 사용할 수 있습니다.

#!/bin/bash

KEYPATH=~/.ssh/*
HOSTS=( localhost hosta hostb )

probekey ()
{
    for privkey in $KEYPATH
    do
    if [[ "$(file $privkey)" =~ "private" ]]
    then
        #echo "Probing key $privkey for host $1"
            ssh -i "${privkey}" -o "IdentitiesOnly yes" -o "PreferredAuthentications publickey" -o "ControlMaster no" "$1" exit 2>/dev/null
            if [ "$?" == "0" ]
            then
            echo "Key ${privkey} matches for host $1"
        fi
    fi
    done
}

for HOST in ${HOSTS[@]}
do
    probekey $HOST
done

이 스크립트의 주요 목적은 호스트 배열( )을 반복하고 $HOSTS해당 probekey기능을 수행하는 것입니다. 이 함수는 의 파일 목록을 반복하여 $KEYPATH파일 형식에 개인(RSA 또는 DSA 개인 키 파일의 경우)이 포함되어 있는지 확인하고 일치하는 경우 ssh해당 특정 키를 사용하여 호스트에 대한 연결을 시작합니다. 연결이 성공하면 반환 코드는 0이고 메시지가 인쇄됩니다.

이는 질문에 대한 정확한 답변이 아니기 때문에하다호스트에 로그인하고(키가 일치하는 경우) exit명령을 실행하여 직접 다시 로그아웃하세요.

답변2

로그인하지 않으면 서버에서 어떤 키가 허용되는지 확인할 수 없습니다. 키가 승인되었는지 알 수 있는 유일한 방법은 해당 키를 사용하여 로그인을 시도하는 것입니다.

계정에서 허용하는 키를 나열하는 방법이 있다면 이는 개인 정보 보호를 침해하고 어떤 경우에는 유출이 더 쉬워질 수 있습니다. SSH는 계정 이름이 유효한지 여부조차 알려주지 않습니다. 로그인 거부는 계정 이름을 알 수 없거나 인증 데이터가 유효하지 않기 때문에 로그인이 거부된 것입니다. 그렇게 하지 않으면 최소한 누가 컴퓨터에 계정을 가지고 있는지 노출되어 개인정보를 침해하게 됩니다. 또한 공격자가 기존 계정에 집중할 수 있기 때문에 비밀번호가 취약한 계정에 대한 무차별 대입 공격을 로그 및 침입 방지 시스템에서 탐지하기가 더 쉽고 어려워집니다.

서버로 보내려는 키를 선택하는 것은 SSH 클라이언트에 달려 있습니다. OpenSSH의 경우 IdentityFile구성 옵션( -i명령줄 옵션)을 사용하여 구성하고 ssh-agent에 로드할 키를 선택하거나 IdentitiesOnly구성 옵션을 지정할 수 있습니다. 서버는 클라이언트에게 챌린지(임의로 생성된 문자열)를 보냅니다. 클라이언트는 개인 키와 해당 공개 키로 암호화되어 서명된 질문에 응답해야 합니다. 서버는 서명이 해당 키를 사용하는 질문에 대한 유효한 서명인지, 요청한 사용자 이름과 공개 키 조합이 유효한지 확인합니다. (보통 마지막 부분은 ~/.ssh/authorized_keys이 공개 키를 포함하는 사용자 파일에 행이 있음을 의미합니다.) 클라이언트는 여러 번 시도할 수 있습니다(서버는 몇 번 후에 연결을 포기하고 닫습니다).

어떤 키가 어떤 서버에 유효한지 잊어버린 경우 가장 쉬운 방법은 서버에 로그인하여 ~/.ssh/authorized_keys파일을 확인하는 것입니다. 해당 서버에 로그인하는 유일한 방법은 성공할 때까지 모든 키를 시도하는 것임을 알고 있다면 그렇게 해야 합니다. (물론 어떤 키를 사용할 수 있는지 알려주므로 읽을 필요가 없습니다. ~/.ssh/authorized_keys) . 동일한 계정으로 여러 번 시도해야 하는 경우 완료하기 전에 서버에서 연결을 닫을 수 있도록 준비한 후 다시 시도하십시오.

나중에 참조할 수 있도록 다양한 키가 있는 경우 .ssh/config각 호스트에 대한 올바른 지침을 사용하여 하나를 유지하세요.IdentityFile

¹ 단순화 중입니다실제 합의, 여기에는 필요한 것만 보관하세요.

관련 정보