Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SSHの便利な使い方〜マイナーな小技編〜

2,326 views

Published on

SSHの少しマイナーだけど便利な設定についてのスライドです。

内容は多段SSH(ProxyCommand), scpの補完を高速化する方法(ControlMaster), VPN over SSH(Tunnel) についてです。

以前某所でLTしたときのスライドを焼き直したものです。

Published in: Software
  • Be the first to comment

SSHの便利な使い方〜マイナーな小技編〜

  1. 1. SSHの便利な使い方 〜マイナーな小技編〜 @ktateish 2012/07/25
  2. 2. 自己紹介 ● なまえ: @ktateish ● すきなもの: OS, ネットワーク、etc... 最近はCommonLispを勉強中 ● しゅみ: マンガ、ゲーム、水泳 よろしくおねがいします
  3. 3. 発表概要 ● SSHの便利な使い方 ● sshを使っていて、こんなことないですか? ● 踏み台サーバ経由でログインするときsshを2回打つの がダルい ● scp叩くときにリモートのファイル名を補完したい ● 複数ポートをフォワードするのが面倒なのでいっそのこ とVPNを張りたい ● このようなニッチな要望に対して、 ssh_config ($HOME/.ssh/config)の記述等で解決する方法を示 すのが、この発表の趣旨です。
  4. 4. 注意 このスライドには、会社等のセキュリティポリ シーが厳格なネットワークで試すには危険な設 定例が含まれています。
  5. 5. ①ワンステップ多段ログイン
  6. 6. NW2NW1 ①ワンステップ多段ログイン(1/3) ● 以下のような環境を想定 ● マシンが3台: client - gw - server ● gwで2つのネットワークnw1とnw2が接続 ● clientから ssh gw は可能だが、ssh server は不可 ● 普通はssh gw してgwからssh serverすればよい。 だが、面倒だ。 client gw server
  7. 7. ①ワンステップ多段ログイン(2/3) ● ssh_configに ProxyCommand を記述します。 ● ➔ ➔ client で ssh server と打つだけで、serverへのログイ ンが可能に。(必要に応じて鍵登録は行う) GSS... はログイン時に異常に待たされる事象対策 ● 何が嬉しいの? ● 面倒くさくない。scp で中間ファイル不要等。 Host server ProxyCommand ssh gw nc server 22 GSSAPIAuthentication no NW2NW1 client gw server
  8. 8. NW2NW1 NW3 NW4 ①ワンステップ多段ログイン(3/3) ● 応用編 ➔ ➔ “%h”, “%p” でホスト名とポート番号を一般化 ➔ Hostに複数ホスト複数ホストを記述可能 ➔ ➔ ➔ 好きなだけ多段化可能(↑clientでssh server3が可) Host server1 server2 *.example.jp ProxyCommand ssh gw nc %h %p Host gw2 ProxyCommand ssh gw nc %h %p Host gw3 ProxyCommand ssh gw2 nc %h %p Host server3 ProxyCommand ssh gw3 nc %h %p client gw server3gw2 gw3
  9. 9. ②scpファイル名補完高速化
  10. 10. ②scpファイル名補完高速化(1/2) ● zshやbash_completionを使うとscpコマンドでリ モートホストのファイル名補完が可能になります が、動作が非常に遅い(耐えられないほど)。 ● scp server:/home/[TAB] ↑このあと1、2秒ぐらい待たされるのが普通 ● 無理に補完しなくとも、別sshでログインし、ls等で 補完しつつ表示してマウスクリックでコピペすれ ばよい だが、面倒だ。
  11. 11. ②scpファイル名補完高速化(2/2) ● ssh_configに以下を記述をするとローカルファイル補完と 遜色ないレスポンスで補完できるようになります。 ● scpの前に一度sshログインしておく必要あり ● 本来はコネクション共有のための設定 ● 重いTCPセットアップ・認証処理が不要になるの で、副次的にscp補完が超高レスポンスに ● 若干セキュリティ上のリスクがあるので注意 (ControlPathを読み書きできる人は誰でも既存 のコネクションを利用可能) Host * ControlMaster auto ControlPath ~/.ssh/.sock-%l-%r@%h:%p ControlPersist yes
  12. 12. ③VPN over SSH using tun device
  13. 13. ③VPN over ssh(1/5) ● SSHは -L や -R で様々なTCPセッションを転送 できるのは有名です ● → 本来できないはずの逆向きのsshを可能にしたり ● → まるでjnspcからのSMTP接続かのように見せかけたり ● etc... ● 転送したい接続の種類だけ ssh -L, ssh -R すれ ば、あらゆるTCPセッションの転送が可能。 user@knzpc% ssh -L 10025:smtp.srv.cc.example.jp:25 jnspc user@jnspc% ssh -R 10022:localhost:22 knzpc
  14. 14. ③VPN over ssh(2/5) だが、面倒だ。 → VPNを張ってしまえ
  15. 15. ● 以下のような環境を想定 ● client – server 間をL2-VPNでつなぐ ● client, server は Fedora (RH系) を想定 ● VPNのNWは192.168.1.0/24とする ③VPN over ssh(3/5) NW2NW1 client gw server br9: 192.168.1.1 tap9 tap9 br9: 192.168.1.2 SSH Tunnel
  16. 16. ③VPN over ssh(4/5) ● clientの設定 ● root の ssh_config ● ifcfg-br9 ・ ifcfg-tap9 Host * ControlMaster auto ControlPath ~/.ssh/.sock-%l-%r@%h:%p ControlPersist yes Host server-tun ← 普通の接続と区別のため「server-tun」に HostName server ← 本当のホスト名を指定 ProxyCommand ssh gw nc %h %p Tunnel ethernet ← トンネル設定(L2 VPN) TunnelDevice 9:9 ← 両者のデバイス番号を9に固定 LocalCommand ifup tap9 ← VPN接続後トンネルデバイスを有効化 DEVICE=br9 ONBOOT=yes TYPE=Bridge IPADDR=192.168.1.1 NETMASK=255.255.255.0 DEVICE=tap9 ONBOOT=no BRIDGE=br9 clientclient
  17. 17. ③VPN over ssh(5/5) ● serverの設定 ● sshd_config(抜粋) ● ifcfg-br9 ・ ifcfg-tap9 ● 接続実行 ね、簡単でしょう? PermitTunnel yes DEVICE=br9 ONBOOT=yes TYPE=Bridge IPADDR=192.168.1.1 NETMASK=255.255.255.0 DEVICE=tap9 ONBOOT=no BRIDGE=br9 serverserver root@client# ssh server-tun ifup tap9
  18. 18. まとめ ● ProxyCommandで多段ログインを1回のsshに まとめられる ● ControlMaster で scp のリモートファイル補 完が実用レベルになる ● Tunnel で VPN over SSH もさっくり可能
  19. 19. 参考文献 ● ssh(1) ● ssh_config(5) ● sshd_config(5)
  20. 20. おわり ご清聴ありがとうございました

×