それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh 接続でサーバ証明書のknownhosts登録を節約する - Aliasを使う

ssh でサーバーIPが変わると、、、、

ドメイン名が同じでも、サーバーIPが変わると、次のようなメッセージが出る

takuya@rena:~$ ssh takuya.example.com
The authenticity of host '[takuya.example.com]:22 ([192.168.2.100]:22)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxNF4wWt7KZVxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

他にも、ローカルフォワードでyes地獄

takuya@rena:~/Desktop$ ssh test1
The authenticity of host 'www-server ([localhost]:2222)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxNF4wWt7KZVxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

同じサーバーでも、ポートを変えると。。。また、ホストキーを確認することになる。

ドメイン名や、サーバー名でキーを登録できないの?

ずっと思ってた。もしかしてknown_hosts を無効にするしか無いのかなと。そんなことも考えた。

実は出来た。

HostKeyAlias の設定でIP/Portの変化に対応する。

hostkeyalias の設定をすれば、KnownHostsのファイルに、別名で保存され、IP非依存になる。

hostkeyaliasとCheckHostIP noの設定すればKnownHostsのファイルに、別名で保存され、IP非依存になる。

まじか。それは捗る。

設定 .ssh_config

たとえば、test1/test2 のホストキーをすべて www-serverとして使う設定

Host test1
 hostkeyalias www-server
 hostname localhost
 port 2222
Host test2
 hostkeyalias www-server
 hostname localhost
 port 2223

これで、KnownHostsの登録が一回で済む!便利。

ポートフォワードと組合せてた戦う

config と組合せてて戦うと設定が面倒なので、ワンタイムで出来るようにコマンドラインオプションをツケてもイイ。

takuya@rena:~$ ssh -o hostkeyalias=my_alias_name localhost -p 22222

あとはこれを alias するとか

alias ssh-my-server="ssh -o hostkeyalias=my_alias_host_name"

config の host に書けばイイ

host *-alias
 hostkeyalias my_alias_name
 CheckHostIP no

これでずいぶんと楽になった。

2015-07-27 追加

CheckHostIP no はやっぱり必要でした。

参考図書

関連エントリ

ssh の接続を節約する。ControlMasterを設定する - それマグで!