서버에서 SSH 인증 키를 제거하는 명령

서버에서 SSH 인증 키를 제거하는 명령

서버에서 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_keysauthorized_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가 실패합니다.

관련 정보