サーバーを入れ直したら、ssh でつなぐときに WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! って出てつながらへん
【疑問】REMOTE HOST IDENTIFICATION HAS CHANGED って怒られた。ssh-keygen・authorized_keys・known_hosts・ssh-agent と鍵のファイル名【LPICレベル1】
前提のおさらい。ホストのセキュリティは、要らんサービスを止めて、つないでよい相手を絞るところから。SSH は TCP の22番で、ログインに使う代表的なサービス
>>1
SSH には2種類の鍵がある
ホスト鍵:サーバーが自分を証明する鍵。/etc/ssh/ssh_host_ed25519_key などで、入れ直すと作り直される
ユーザーの鍵:ユーザーが自分を証明する鍵。~/.ssh/id_ed25519 など
クライアントは前につないだサーバーのホスト鍵を ~/.ssh/known_hosts に覚えてて、違うと警告する。なりすましの防止
>>3
ほな、入れ直したのが確かなら?
>>4ssh-keygen -R ホスト名 で known_hosts からその行を消して、つなぎ直して新しい鍵を確かめて受け入れる
試したら、作業用の known_hosts で ssh-keygen -R host1.example.com -f kh が kh updated. を出して、元のは kh.old に残った。ssh-keygen -F ホスト名 で探す、ssh-keygen -H でホスト名をハッシュにする(|1| で始まる形になった)
>>5
VM をイメージから複製したら、ホスト鍵も同じになってしまうから、ssh-keygen -A などで作り直すんやったな
パスワードやなくて鍵でログインしたい
>>7
1. 手元で ssh-keygen で鍵の組を作る(秘密鍵と、.pub の公開鍵)
2. 公開鍵をサーバーの ~/.ssh/authorized_keys に1行で足す(ssh-copy-id user@host でも)
3. 秘密鍵は手元から出さない
>>8
作業用のディレクトリで試した結果(OpenSSH 10.0)
-t なしの ssh-keygen:ED25519 の256ビット-t rsa:3072ビット-t ecdsa:256ビット-t dsa:unknown key type dsa(OpenSSH 10 で DSA はなくなった)
>>9
ファイル名は種類で決まってて、id_ed25519 と id_ed25519.pub、id_rsa と id_rsa.pub、id_ecdsa と id_ecdsa.pub。作られた秘密鍵は -rw-------、公開鍵は -rw-r--r-- やった
>>8
authorized_keys に書いたのに、鍵で入れない
>>11
権限を見る。sshd は StrictModes yes(既定)で、ホーム・~/.ssh・authorized_keys がほかの人に書き込めると鍵を使わない。~/.ssh は700、authorized_keys は600 にしとく
場所は sshd_config の AuthorizedKeysFile で、既定は .ssh/authorized_keys と .ssh/authorized_keys2
>>8
秘密鍵のパスフレーズを毎回打つのが面倒
>>13
ssh-agent に覚えさせる。eval "$(ssh-agent)" で起動して(SSH_AUTH_SOCK と SSH_AGENT_PID が入る)、ssh-add ~/.ssh/id_ed25519 で鍵を渡す。ssh-add -l で一覧、-D で全部消す
>>14
試したら、起動した直後の ssh-add -l は The agent has no identities.、ssh-add の後は 256 user@host (ED25519) と出た。-D で All identities removed.、最後に ssh-agent -k で止めた(作業用のソケットで、自分の環境変数は変えてない)
>>3
サーバーの設定で気を付けるところは?
>>16
/etc/ssh/sshd_config。PermitRootLogin(既定は prohibit-password で、root はパスワードではだめ)、PasswordAuthentication(鍵だけにするなら no)、AllowUsers など。クライアントの設定は ~/.ssh/config と /etc/ssh/ssh_config
>>3
ホスト鍵とユーザーの鍵、変わったら ssh-keygen -R、鍵は ssh-keygen で作って公開鍵を authorized_keys へ、権限は700と600、パスフレーズは ssh-agent と ssh-add。入れ直したせいやったか
管理人のひとこと
- ホスト鍵(/etc/ssh/ssh_host_*_key)はサーバーの証明で、クライアントは ~/.ssh/known_hosts に記録する。変わると警告が出る。
ssh-keygen -Rで削除、-F で検索、-H でハッシュ化、-A でホスト鍵を作り直す。 - ユーザーの鍵は
ssh-keygen(-t ed25519・rsa・ecdsa。OpenSSH 10 の既定は ED25519、RSA は3072ビット、DSA は廃止)。秘密鍵 ~/.ssh/id_種類、公開鍵 id_種類.pub。 - 公開鍵をサーバーの ~/.ssh/authorized_keys に追加(ssh-copy-id)。StrictModes で権限が厳しく見られるので ~/.ssh は700、authorized_keys は600。
- ssh-agent(
eval "$(ssh-agent)")と ssh-add(-l 一覧、-D 全削除)でパスフレーズの入力を減らす。サーバーは sshd_config(PermitRootLogin・PasswordAuthentication)、クライアントは ~/.ssh/config・ssh_config。