ssh-keygen -Rでknown_hostsの特定エントリを削除する

not foundと言われてしまった人向けメモ

VPSを再構築したのでknown_hostファイルのエントリを削除することに.
そのときのメモです.

詰まったところ

特定のエントリの削除はssh-keygenコマンドと-Rオプションを使います.

1
$ ssh-keygen -R xxx.xxx.xxx.xxx

ですが, 以下のように見つからないと言われます.

1
Host xxx.xxx.xxx.xxx not found in /home/tsolsikke/.ssh/known_hosts

そこで, manコマンドで使い方を確認してみますと以下のようになっています.

1
2
3
 -R hostname | [hostname]:port
             Removes all keys belonging to the specified hostname (with optional port number) from a known_hosts
             file.  This option is useful to delete hashed hosts (see the -H option above).

ポート番号も22でない場合は指定しなければいけないようです.

1
2
$ ssh-keygen -R xxx.xxx.xxx.xxx:yyyy
Host xxx.xxx.xxx.xxx not found in /home/tsolsikke/.ssh/known_hosts

それでも見つからない…? ホスト名を変更するなど色々試しましたが駄目.

ですが, 答えは先程のmanページの中にありまして, [hostname]:port[]部分は任意という意味でなく文字通り入力しないといけないのでした.

答え合わせ

1
$ ssh-keygen -R "[xxx.xxx.xxx.xxx]:yyyy"

ポート番号を指定するときは[]をホスト名に付けます.
*nix系のコマンドのマニュアルにおいて, []はオプションで入力するものを表すことが多いのですが, この場合はそうでないということです.

今日も変なところで詰まってしまった…

TIPS

ちなみにですが, 今回使ったssh-keygen -Rのようなマイナス記号のついたコマンドをそのまま検索するとマイナス検索として処理されてしまいます.

そこで, マイナスの付いているキーワードをダブルクォートで囲んであげると文字通りで検索出来ます.

1
ssh-keygen "-R"

当たり前の人にとっては当たり前のことなのですが, コマンドを調べる際などには必須知識ですね.

Built with Hugo
テーマ StackJimmy によって設計されています。