結論
リンクローカルアドレス%%インターフェース名
のように、%を2つ書く
概要
fe80で始まるIPv6のリンクローカルアドレスは、ルーターを越えられないけどL2のブロードキャストドメインの範囲内であれば通信可能だし、IPv4のリンクローカルアドレスと違って、IPv6のリンクローカルアドレスは必ず割り当てられる。
IPv6に慣れるためにもSSH接続にIPv6のリンクローカルアドレスを使ってみたけど、コマンドラインから直接指定する場合は問題ないのに、ssh_configに書くと接続できなかったので調べてみた。
調べてみた
まず、コマンドラインから指定する場合、以下の書き方をする。
『相手のリンクローカルアドレス+%+自分のインターフェース名』
こんな感じ
% ssh fe80::hoge:hoge:fuga:fuga%en0
$ ssh fe80::hoge:hoge:fuga:fuga%enp3s0
これをそのまま ssh_config(~/.ssh/config
) へこんな感じ↓に書くと…
Host server01v6l
HostName fe80::hoge:hoge:fuga:fuga%en0
HostKeyAlias server01
こんなメッセージ↓が出て繋がらない
% ssh server01v6l
vdollar_percent_expand: unknown key %e
percent_expand: failed
ssh_config において’%‘という文字はプレースホルダーであり、例えば、ProxyCommand の %h(接続先ホスト)や、%p(接続先ポート)のように特別な意味を持つ。
他のものはman ssh_config
のTOKENSに書いてある。
そして、TOKENSにはこうも書いてある。
%% A literal ‘%’.
つまり、ssh_configで%という文字を使いたかったら%%と2つ書く。
こんな感じ。
Host server01v6l
HostName fe80::hoge:hoge:fuga:fuga%%en0
HostKeyAlias server01