狠狠撸

狠狠撸Share a Scribd company logo
SSHの便利な使い方
?マイナーな小技編?
@ktateish
2012/07/25
自己紹介
● なまえ:
@ktateish
● すきなもの:
OS, ネットワーク、etc...
最近はCommonLispを勉強中
● しゅみ:
マンガ、ゲーム、水泳
よろしくおねがいします
発表概要
● SSHの便利な使い方
●
sshを使っていて、こんなことないですか?
● 踏み台サーバ経由でログインするときsshを2回打つの
がダルい
● scp叩くときにリモートのファイル名を補完したい
● 複数ポートをフォワードするのが面倒なのでいっそのこ
とVPNを張りたい
● このようなニッチな要望に対して、 ssh_config
($HOME/.ssh/config)の記述等で解決する方法を示
すのが、この発表の趣旨です。
注意
このスライドには、会社等のセキュリティポリ
シーが厳格なネットワークで試すには危険な設
定例が含まれています。
①ワンステップ多段ログイン
NW2NW1
①ワンステップ多段ログイン(1/3)
● 以下のような環境を想定
●
マシンが3台: client - gw - server
●
gwで2つのネットワークnw1とnw2が接続
●
clientから ssh gw は可能だが、ssh server は不可
● 普通はssh gw してgwからssh serverすればよい。
だが、面倒だ。
client gw server
①ワンステップ多段ログイン(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
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
②蝉肠辫ファイル名补完高速化
②蝉肠辫ファイル名补完高速化(1/2)
● zshやbash_completionを使うとscpコマンドでリ
モートホストのファイル名補完が可能になります
が、動作が非常に遅い(耐えられないほど)。
● scp server:/home/[TAB]
↑このあと1、2秒ぐらい待たされるのが普通
● 無理に補完しなくとも、別sshでログインし、ls等で
補完しつつ表示してマウスクリックでコピペすれ
ばよい
だが、面倒だ。
②蝉肠辫ファイル名补完高速化(2/2)
●
ssh_configに以下を記述をするとローカルファイル補完と
遜色ないレスポンスで補完できるようになります。
●
scpの前に一度sshログインしておく必要あり
●
本来はコネクション共有のための設定
●
重いTCPセットアップ?認証処理が不要になるの
で、副次的にscp補完が超高レスポンスに
●
若干セキュリティ上のリスクがあるので注意
(ControlPathを読み書きできる人は誰でも既存
のコネクションを利用可能)
Host *
ControlMaster auto
ControlPath ~/.ssh/.sock-%l-%r@%h:%p
ControlPersist yes
③VPN over SSH
using tun device
③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
③VPN over ssh(2/5)
だが、面倒だ。
→ 痴笔狈を张ってしまえ
● 以下のような環境を想定
● 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
③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
③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
まとめ
●
ProxyCommandで多段ログインを1回のsshに
まとめられる
●
ControlMaster で scp のリモートファイル補
完が実用レベルになる
●
Tunnel で VPN over SSH もさっくり可能
参考文献
● ssh(1)
● ssh_config(5)
● sshd_config(5)
おわり
ご清聴ありがとうございました

More Related Content

厂厂贬の便利な使い方?マイナーな小技编?