OpenSSH新機能ヒストリ(6.1〜5.1)

Software Design 10月号の『SSH力をつけよう!』で火がついたのでカッとなってコピペした。

以前

OpenSSH にできること(の一部)ヒストリ - あーありがち(2008-04-08)

ってのを書いてるんだけど、これの続編。例によって全面的に OpenSSH情報 頼みかつ、自分で分かる範囲しかピックアップできてないので漏れまくりかつ間違っている可能性があります!!1

個人的なヒットは

  • 5.4 の netcat mode
  • 5.6 の ControlPersist
  • 5.7 の scp -3
  • 5.9 の ssh_config内でのtty要求, sshd の chroot 対応強化
  • 6.0 の port forward キャンセル

辺りですかね。

netcat modeとControlPersistの個人的まとめ

netcat mode は

ssh -o ProxyCommand='ssh user@dest_host -W %h:%p' gateway_host

こんな感じで使う。これと ControlMaster と scp -3 を組み合わせると割と面倒なネットワークでもそこそこ手軽に作業できそう。

試したところ ControlPersist と netcat mode は両立できないっぽい。netcat mode を使いたい中継 host は限られると思うので、その host でだけ ControlPersist no すればいいのかも。以下のような感じかな。

Host Foo
  ControlPersist no

Host *
  ControlPersist 10

ControlPersist は 全部 pubkey で認証してて ssh agent 使ってれば手間的には要らないっちゃ要らないのでそこまで気にする必要ないかもだけど。(もちろん TCP connection的 には違う)

ProxyCommand も、もちろんいちいち打つのは面倒なので、gateway として使うときの Host と普通にログインするときの Host を分けて設定しておくといいのかも。まとめると以下のような感じか。

Host A-SS
  Hostname foo.example.com
  ProxyCommand ssh user@dest_host -W %h:%p
  ControlPersist no
Host A
  Hostname foo.example.com

Host *
  ControlPersist 10

6.1

  • sandbox有効なsshdをデフォルトに
  • Match で LocalAddress, LocalPort サポート
  • Match で AcceptEnv, Allow Users, Deny Group などをサポート
  • PermitOpen none サポート
  • AuthorizedPrincipalsFile none サポート
  • sshd_config の VersionAddendum でプロトコルバナーに任意の文字列を追加可能

6.0

  • ssh-add -k オプション追加
  • sshd が PermitOpen で * ワイルドカードサポート
  • 多重化された接続での転送のキャンセルをサポート
  • コマンドライン ~C で転送のキャンセルをサポート(多重化されている場合は記法が異なる)

port forward のキャンセルができるのは面白い。

5.9

  • UsePrivilegeSeparation=sandboxモード追加
  • chroot 内の /dev/log が不要に
  • AuthorizedKeysFile は空白区切りの複数パスをサポート
  • ControlPath オプションは %L を接続先ホスト名(の、host portion というのはドメインを除くという意味かな)に展開する
  • ssh_config の Host で否定マッチをサポート
  • ssh_config の RequestTTY で -t/-tt/-T コマンドラインオプションのような tty 要求をサポート
  • ssh-keygen -A オプション追加
  • ssh-add が標準入力をサポート

より chroot-friendly なところと tty 要求が config に書けるのがよさげ。

5.8

bug fix のみ

5.7

  • サポート暗号モードの追加とパフォーマンス強化
  • sftp でのハードリンクサポート
  • sep -3 で remote -> local -> remote コピーをサポート。remote -> remote が直接接続できない場合に有効。
  • sftp クライアントの高速化
  • KexAlgorithms サポート
  • scp での帯域制限コードを sftp にも

scp -3 は遅そうだなというのが最初の感想だけど、ネットワークのポリシーで直通をサポートできないのは方向を含めると意外にありそうなので、便利に使えそうな気もする。

5.6

  • ControlPersist 追加。controlmaster をバックグラウンドに回してくれる機能。
  • sshd および ssh-keygen でのCA鍵のサポート
  • ssh_config 中の Hostname 項目での %h の展開サポート
  • ssh-keygen の import, export 機能でサポートする鍵の追加
  • 認証時の permission チェックの結果を認証成功後に受け取るように
  • 動的な remote forward
  • AuthorizedPrincipalsFile サポート
  • Match ブロック中の AuthorizedKeysFile, AuthorizedPrincipalsFile HostbasedUsesNameFromPacketOnly, PermitTunnel サポート

個人的なポイントは ControlPersist. 詳しくは以下のエントリが参考になります。

OpenSSHのセッションを束ねるControlMasterの使いにくい部分はControlPersistで解決できる - Dマイナー志向

動的な remote forward もたぶんすごいんだろうけど、イマイチよく分かってません。permission チェックのメッセージを成功後にするというのは地味な改善だけどそう言われればそうかという感じ。

5.5

bug fix のみ

5.4

  • ssh protocol 1 をデフォルト無効に
  • (X.509)ではない最小限の証明書フォーマットサポート
  • -W で netcat mode サポート。これまで踏み台で nc を動かしていたようなケースで、手元の ssh が 5.4 以上になれば ssh だけで同様のことが可能に
  • ssh および sshd にて任意の鍵を無効にする機能を追加
  • sftp-server に read-only mode 追加
  • sftp client の各種強化および -P オプションの変更

5.4 の目玉はやはり netcat mode でしょうね。以下が参考になります。

OpenSSH のNetcat modeを使う - TIM Labs

5.3

bug fix のみ

5.2

  • -y オプションで syslog へ
  • sshd_config の ForceCommand が internal-sftp のために引数を取れるようになった
  • -D で SOCKS4A サポート
  • port 0 での remote forward
  • Match ブロックで PermitEmptyPasswords と AllowAgentForwarding サポート

5.1

  • Match address の アドレス/マスク長の指定においてクラシックな * ワイルドカードへのフォールバック付きでサポート
  • sftp が df コマンドサポート
  • MaxSessions サポート。単一TCP接続上のセッション数を 1 や 0 も含めて任意に設定可能。
  • ssh-keyscan が rsa2 をデフォルトに
  • AllowAgentForaward 追加
  • Match ブロック内で MaxAuthTries が設定可能に

More