December 23, 2023

ssh_configでのIPv6リンクローカルアドレスの書き方

結論

リンクローカルアドレス%%インターフェース名 のように、%を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

© 2020 nissy-lab.com