Index: [Article Count Order] [Thread]

Date: Sun, 13 Mar 2005 15:11:51 +0900
From: HARUYAMA Seigo <haruyama@queen-ml.org>
Subject: [ssh:00231] OpenSSH 4.0 の新機能
To: ssh@koka-in.org
Message-Id: <87oedogjmg.wl%haruyama@queen-ml.org>
X-Mail-Count: 00231


  春山です.

  OpenSSH 4.0 の新機能のうち興味深いと思ったものについて紹介します.

1) bind(束縛)するアドレスを指定してポートを転送する

  ポートを転送する際にbindするアドレスを指定できるようになりました.

  ローカル, ダイナミック ポート転送においては,
  明示的にbindするアドレスを指定した場合には
  ssh_config(5)のGatewayPorts の設定が 'no' であっても無視されます.
  
  リモートポート転送においては,
  ssh_config(5)のGatewayPorts の設定が 'clientspecified' の場合にだけ
  明示的な設定が有効になります.


  loopback(localhost: 127.0.0.1)とethernet(192.168.10)
  のインタフェイスを持つマシンで
  いろいろな指定をしたローカルポートの転送を行なってみました.
  基本的には
  10022番ポートをローカルホストの22番ポートに転送しています.
  22番ポートではDebian unstableのパッケージによって導入された
  sshデーモンが動いています.
  
% ssh -V
OpenSSH_4.0p1, OpenSSL 0.9.7e 25 Oct 2004
----------
OpenSSH 3.9までの方法も利用できるし動作も互換しています.
=====
% ssh -L 10022:localhost:22 localhost

(loginしている)% telnet localhost 10022
Trying 127.0.0.1...
Connected to XXXXX.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4

(loginしている)% telnet 192.168.1.10 10022
Trying 192.168.1.10...
telnet: Unable to connect to remote host: Connection refused
----------
'GatewayPorts yes' を指定すると...
=====
% ssh -o GatewayPorts=yes -L 10022:localhost:22 localhost

telnet localhost 10022    ○
telnet 192.168.1.10 10022 ○ (もちろん他のマシンからもみえる...他にフィルタなどしていなければ)
----------
localhostの10022番ポートをbindするように指定
=====
% ssh -L localhost:10022:localhost:22 localhost

telnet localhost 10022    ○
telnet 192.168.1.10 10022 ×
----------
localhostの10022番ポートをbindするように指定 'GatewayPorts yes' は無視されます
=====
% ssh -o GatewayPorts=yes -L localhost:10022:localhost:22 localhost


telnet localhost 10022    ○
telnet 192.168.1.10 10022 ×
----------
192.168.1.10の10022番ポートをbindするように指定
=====
% ssh -L 192.168.1.10:10022:localhost:22 localhost

telnet localhost 10022    ×
telnet 192.168.1.10 10022 ○
----------
'*' や 空のアドレスを指定すると, すべてのアドレスをbindします
=====
% ssh -L \*:10022:localhost:22 localhost
% ssh -L :10022:localhost:22 localhost

telnet localhost 10022    ○
telnet 192.168.1.10 10022 ○
----------




2) known_hosts ファイルで, 生のホスト名とアドレスではなくそれらのハッシュ値を
   記録して用いることができるようになりました.
   ssh(1), ssh-keyscan(1), ssh-keygen(1)で利用できます.

   ssh_config(5)の HashKnownHosts 設定項目でハッシュを取るかどうかを制御
   できます. デフォルトは off ですが, 将来は on となる模様です.
 
   これは, どのようなホストを訪れたかという情報を隠蔽するために加えられました.
   しかし, known_hosts ファイルをハッシュ化しても, シェルの履歴を記録する
   ファイルでも sshの記録を取らないようにする/適当に消す などを行なわないと
   意味がないでしょう. また
   known_hosts ファイルを利用したシェルの補完
http://www.unixuser.org/%7Eharuyama/security/openssh/shell_completion.html
   が使えなくなります.

   このハッシュ化に対するssh-keygenのインタフェイスをいくつか紹介します.
  
----------
known_hostsファイルのすべてのエントリのハッシュ化
=====
% ssh-keygen -H
/home/haruyama/.ssh/known_hosts updated.
Original contents retained as /home/haruyama/.ssh/known_hosts.old
WARNING: /home/haruyama/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames

生の情報がはいったエントリが
(
hostname ssh-rsa ...
XXX.XXX.XXX.XXX ssh-rsa ...
hostname,XXX.XXX.XXX.XXX ssh-rsa ...
など)

|1|oW3TTGWcNDOCDwF6L9Er4Wy1+No=|VnjgLLY/GwWbQMNQGFxyb8JZU6I= ssh-rsa ...

といったふうになります.
----------
ホスト名,IPアドレスによる known_hostsファイルのエントリの検索
=====
% ssh-keygen -F mail.unixuser.org
# Host mail.unixuser.org found: line 85 type RSA
....(known_hostsファイルの対応する内容)

ホスト名かIPアドレスに完全にマッチしたエントリしか表示しないようです.
----------
ホスト名,IPアドレスによる known_hostsファイルのエントリの削除
=====
% ssh-keygen -R  mail.unixuser.org
/home/haruyama/.ssh/known_hosts updated.
Original contents retained as /home/haruyama/.ssh/known_hosts.old
% ssh-keygen -F  mail.unixuser.org
%

~/.ssh/known_hosts.old ファイルが上書きされます.
----------



春山 征吾 / HARUYAMA Seigo  haruyama@unixuser.org  haruyama@queen-ml.org