.ssh / authorized_keys에 입력 한 모든 지문 목록을 얻는 간단한 방법이 있습니까? .ssh / authorized_keys2 파일?
ssh-keygen -l -f .ssh/authorized_keys
첫 줄 / 입력 / 공개 키의 지문 만 반환합니다.
awk로 해킹 :
awk 'BEGIN {
while (getline < ".ssh/authorized_keys") {
if ($1!~"ssh-(r|d)sa") {continue}
print "Fingerprint for "$3
system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \
ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \
rm /tmp/authorizedPublicKey.scan"
)
}
}'
그러나 내가 찾지 못한 더 쉬운 방법이나 ssh 명령이 있습니까?
답변
임시 파일없이 일반 bash를 사용하는 또 다른 해킹이 있습니다.
while read l; do
[[ -n $l && ${l###} = $l ]] && ssh-keygen -l -f /dev/stdin <<<$l;
done < .ssh/authorized_keys
당신은 쉽게 당신의 기능으로 만들 수 있습니다 .bashrc
:
function fingerprints() {
local file="${1:-$HOME/.ssh/authorized_keys}"
while read l; do
[[ -n $l && ${l###} = $l ]] && ssh-keygen -l -f /dev/stdin <<<$l
done < "${file}"
}
그리고 그것을 호출하십시오 :
$ fingerprints .ssh/authorized_keys
답변
Mac 및 Linux에서 테스트 한 특정 파일의 모든 주요 지문을 표시하는 이식 가능한 방법은 다음과 같습니다.
#!/bin/bash
fingerprint_keys()
{
if (( $# != 1 )); then
echo "Usage: ${FUNCNAME} <authorized keys file>" >&2
return 1
fi
local file="$1"
if [ ! -r "$file" ]; then
echo "${FUNCNAME}: File '${file}' does not exist or isn't readable." >&2
return 1
fi
# Must be declared /before/ assignment, because of bash weirdness, in
# order to get exit code in $?.
local TMPFILE
TEMPFILE=$(mktemp -q -t "$0.XXXXXXXXXX")
if (( $? != 0 )); then
echo "${FUNCNAME}: Can't create temporary file." >&2
return 1
fi
while read line; do
# Make sure lone isn't a comment or blank.
if [[ -n "$line" ]] && [ "${line###}" == "$line" ]; then
# Insert key into temporary file (ignoring noclobber).
echo "$line" >| "$TEMPFILE"
# Fingerprint time.
ssh-keygen -l -f "$TEMPFILE"
# OVerwrite the file ASAP (ignoring noclobber) to not leave keys
# sitting in temp files.
>| "$TEMPFILE"
fi
done < "$file"
rm -f "$TEMPFILE"
if (( $? != 0 )); then
echo "${FUNCNAME}: Failed to remove temporary file." >&2
return 1
fi
}
사용법 예 :
bash $ fingerprint_keys ~/.ssh/authorized_keys
2048 xx:xx:xx:xx:xx:xx:xx:xx:bb:xx:xx:xx:xx:xx:xx:xx x@x.local (RSA)
bash $
답변
aphink의 답변 과 man xargs 의 / dev / stdin 트릭을 기반으로 한 라이너- 예 :
egrep '^[^#]' ~/.ssh/authorized_keys | xargs -n1 -I% bash -c 'ssh-keygen -l -f /dev/stdin <<<"%"'