서버에서 SSH 키를 제거하는 명령(또는 한 줄짜리)이 있습니까? ssh-copy-id와 반대되는 것인가요?
답변1
Ignaatio가 제안한 대로 이는 grep -v
.
다음은 포함된 키를 제거하거나 다른 키가 남아 있지 않을 때 파일을 some unique string
삭제하는 예입니다 .authorized_keys
if test -f $HOME/.ssh/authorized_keys; then
temp_file=$(mktemp)
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then
cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file;
else
rm $HOME/.ssh/authorized_keys && rm $temp_file;
fi;
fi
some unique string
제거하려는 키에만 존재하는 것으로 바꾸십시오 .
SSH를 통한 oneliner로서 이것은 다음과 같습니다.
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then temp_file=$(mktemp); if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file; else rm $HOME/.ssh/authorized_keys && rm $temp_file; fi; fi'
Linux(SLES) 및 HP-UX에서 테스트되었습니다.
답변2
sed
컴팩트한 솔루션을 제공합니다.
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
이렇게 하면 원본 authorized_keys
이 authorized_keys.bak
. 백업을 원하지 않는다면 -i.bak
그냥 -i
.
여러 키를 제거할 수도 있습니다.
sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys
여기서 유일하게 까다로운 점은정규 표현식의 특수 문자를 이스케이프해야 합니다..
답변3
아니요. 파일에서 키를 SSH로 연결하고 사용하거나 제거 sed
해야 합니다 .grep
답변4
Phil은 이미 이 질문에 답변했지만 추가 작업을 수행하여 더 쉽게 만들고 싶습니다. 그리고 ssh-copy-id의 역방향을 요청하고 계시므로 승인된 시스템에서 실행하고 싶다고 가정합니다.
SSH 키에는 다음만 포함됩니다.베이스64문자. 따라서 해당 목록에 없는 char을 sed 구분 기호로 사용할 수 있습니다. '#'을 사용해보자.
ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
호스트 이름을 서버 IP로 바꾸십시오.
PasswordAuthentication 옵션으로 인해 비밀번호를 묻는 경우 ssh가 실패합니다.