서버에서 ssh 키를 제거하는 명령 (또는 하나의 라이너)이 있습니까? ssh-copy-id의 반대와 같은 것?
ssh-keygen
제공한다 -R
옵션 에서 키를 제거를 known_hosts
슬프게하지만, ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
작동하지 않습니다. sed
대신 아래 옵션 을 사용하십시오 .
서버에서 ssh 키를 제거하는 명령 (또는 하나의 라이너)이 있습니까? ssh-copy-id의 반대와 같은 것?
ssh-keygen
제공한다 -R
옵션 에서 키를 제거를 known_hosts
슬프게하지만, ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
작동하지 않습니다. sed
대신 아래 옵션 을 사용하십시오 .
답변:
Ignatio가 제안한 것처럼이 작업을 수행 할 수 있습니다 grep -v
.
다음은 다른 키가없는 some unique string
경우 authorized_keys
파일을 포함하는 키를 제거 하거나 파일을 삭제 하는 예입니다 .
if test -f $HOME/.ssh/authorized_keys; then
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
else
rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
fi;
fi
some unique string
제거하려는 키에만있는 것으로 교체 하십시오.
ssh의 oneliner로서 이것은
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'
Linux (SLES) 및 HP-UX에서 테스트되었습니다.
sed
이 작업을 수행하는 것이 좋습니다
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
여기서 까다로운 부분 은 정규 표현식의 특수 문자를 이스케이프 처리해야한다는 것 입니다.
awk '{print $2}' ~/.ssh/id_rsa.pub
특수 문자를 이스케이프 처리 할 필요가 없습니다.
Phil은 이미이 질문에 대답했지만 추가 작업을 더 쉽게하고 싶습니다. 그리고 당신은 ssh-copy-id의 반대를 요구하고 있기 때문에, 나는 당신이 그것을 승인 된 컴퓨터에서 실행하고 싶다고 가정합니다.
ssh 키는 base64 문자 만 포함 합니다. 따라서 문자를 해당 목록에없는 sed 구분 기호로 사용할 수 있습니다. '#'을 사용합시다.
ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
호스트 이름을 서버 IP로 바꾸십시오.
PasswordAuthentication 옵션은 비밀번호를 묻는 경우 ssh에 실패합니다
awk '{print $2}' ~/.ssh/id_rsa.pub
일부 sed
또는 grep -v
대신 사용할 수도 있습니다 .