SlideShare a Scribd company logo
1 of 20
Download to read offline
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
②scpファイル名補完高速化
②scpファイル名補完高速化(1/2)
● zshやbash_completionを使うとscpコマンドでリ
モートホストのファイル名補完が可能になります
が、動作が非常に遅い(耐えられないほど)。
● scp server:/home/[TAB]
↑このあと1、2秒ぐらい待たされるのが普通
● 無理に補完しなくとも、別sshでログインし、ls等で
補完しつつ表示してマウスクリックでコピペすれ
ばよい
だが、面倒だ。
②scpファイル名補完高速化(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)
だが、面倒だ。
→ VPNを張ってしまえ
● 以下のような環境を想定
● 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

What's hot

「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 

What's hot (20)

RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 

Viewers also liked

自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介
Kentaro Mitsuyasu
 

Viewers also liked (13)

Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターン
 
AWSで自宅サーバ?
AWSで自宅サーバ?AWSで自宅サーバ?
AWSで自宅サーバ?
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
はじめてのAWS・初めてのJAWS UG沖縄
はじめてのAWS・初めてのJAWS UG沖縄はじめてのAWS・初めてのJAWS UG沖縄
はじめてのAWS・初めてのJAWS UG沖縄
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介
 
LambdaでEC2の使用料金を押さえてみるambda
LambdaでEC2の使用料金を押さえてみるambdaLambdaでEC2の使用料金を押さえてみるambda
LambdaでEC2の使用料金を押さえてみるambda
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
ssh_configのススメ
ssh_configのススメssh_configのススメ
ssh_configのススメ
 
【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)
【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)
【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)
 
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すためにモバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 

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

20130222 osc13tk osc.cms
20130222 osc13tk osc.cms20130222 osc13tk osc.cms
20130222 osc13tk osc.cms
usptomo
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
Masahiko Hashimoto
 

Similar to SSHの便利な使い方〜マイナーな小技編〜 (20)

SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
 
STNSサーバーを書いてみた
STNSサーバーを書いてみたSTNSサーバーを書いてみた
STNSサーバーを書いてみた
 
Oss dev-04
Oss dev-04Oss dev-04
Oss dev-04
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
 
20130222 osc13tk osc.cms
20130222 osc13tk osc.cms20130222 osc13tk osc.cms
20130222 osc13tk osc.cms
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
CNAMEカメレオンパターン - Developers.IO Meetup 05
CNAMEカメレオンパターン - Developers.IO Meetup 05CNAMEカメレオンパターン - Developers.IO Meetup 05
CNAMEカメレオンパターン - Developers.IO Meetup 05
 
SSH応用編_20231129.pdf
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
YAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッションYAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッション
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
HTTP/2 in nginx(2016/3/11 社内勉強会)
HTTP/2 in nginx(2016/3/11 社内勉強会)HTTP/2 in nginx(2016/3/11 社内勉強会)
HTTP/2 in nginx(2016/3/11 社内勉強会)
 
sshdのお話
sshdのお話sshdのお話
sshdのお話
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 

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