- 環境
- Ubuntu 14.04 Desktop 日本語 Remix
最近 ssh でポート転送をすると
$ ssh user@Server -L 5901:localhost:5901
bind: Cannot assign requested address
というようにワーニングっぽいメッセージが表示されるようになりました。
実際はちゃんと ssh もポート転送もできていて実害はないのでそのままにしていましたが、気になるので調べました。
思い出してみると、このメッセージが出だしたのは「 IPv6 を無効にする 」を実施した頃からなので、ssh クライアント側で無効にしている IPv6 の TCP ポートを転送しようとして失敗しているのではないかと想定されます。
man ページを見てみると、ワーニングを出さない方法がいろいろありました。
方法その1: ssh のオプションで接続時のアドレスに IPv4 のみを使うようにする
- ssh の -4 オプションというものがありました。
$ man ssh ... snip ... -4 Forces ssh to use IPv4 addresses only. ... snip ...
これで ssh 接続時に IPv4 のみを使う (IPv6 を使わない) ようにできるようです。
ワーニングメッセージが出なくなりました。
$ ssh user@Server -L 5901:localhost:5901 -4
方法その2: 127.0.0.1 の指定ポートのみを転送するようにする
- 指定したアドレスのポートのみを転送することができるようです。
$ man ssh ... snip ... -L [bind_address:]port:host:hostport ... snip ...
bind_address に localhost を指定するといけそうです。
期待が外れて、これはいけませんでした。
$ ssh user@Server -L localhost:5901:localhost:5901
bind: Cannot assign requested address
しかし、bind_address に 127.0.0.1 を指定した場合はなぜかいけました。
$ ssh user@Server -L 127.0.0.1:5901:localhost:5901
方法その3: sshd_config ファイルの設定で ssh 接続時のアドレスに IPv4 のみを使うようにする
ssh_config の man ページを見てみると...
$ man ssh_config
... snip ...
AddressFamily
t Specifies which address family to use when connecting. Valid arguments
are “any”, “inet” (use IPv4 only), or “inet6” (use IPv6 only).
... snip ...
これも使えそうです。ssh の -4 オプションと同様に ssh 接続時に IPv4 のみを使う (IPv6 を使わない) ようにできるようです。
$ pwd
/etc/ssh
$ diff -U 0 ssh_config.org ssh_config
--- ssh_config.org 2014-04-14 21:13:50.000000000 +0900
+++ ssh_config 2014-07-18 21:23:13.546925882 +0900
@@ -33 +33 @@
-# AddressFamily any
+ AddressFamily inet
いけました。
$ ssh user@Server -L 5901:localhost:5901
ssh_config を編集せずコマンドラインのオプションでも指定できます。
$ ssh user@Server -L 5901:localhost:5901 -o AddressFamily=inet
0 件のコメント:
コメントを投稿