SSH tips & tricks   2012/03/26 第二回ターミナル勉強会                     GREE Inc.               Nobutoshi Ogata
• Oracleさんにお邪魔したらコーヒーが無 限に飲めました• Oracleさんにお邪魔したら身長が10cm 伸びました• Oracleさんにお邪魔したら彼女が出来 ました
はじめましての人は はじめまして
そうでない人は (多分)ご無沙汰してます
前回
zshと仮想端末 マネージャで快適ターミナル生活
screen, tmux, zsh あたりの話をさせて頂きました
改めて自己紹介• 尾形暢俊(おがたのぶとし)• http://twitter.com/nobu666• http://www.facebook.com/nobutoshi.ogata• GREE Inc. 開発本部インフラ統括部  アプリケーシ...
本日はSSHの話を中心にしていきます
「オレの*_historyが  火を吹くぜ」ということですが
多分よーぞーさんとすずきさんで十分燃えたはずなので、オレの*_historyは火を吹きません
あとネタは今回特にないので淡々といきます
SSHは     ただのbetter telnetではない
SSHでできること• セキュアなリモートログイン• 通信の暗号化• ポート転送• セキュアなファイル転送
ここからの前提• Linux• OpenSSH• SSH2プロトコル• sshdはtcp/22でLISTEN
リモートログイン• ssh -i USER -l ~/.ssh/id_rsa REMOTE• まぁ1-2台なら ↑この  書き方でも我慢できそう • ユーザーを使い分けたい • を使い分けたい
.ssh/configHost hoge HostName hoge.example.com IdentityFile ~/.ssh/id_rsa.hoge User hoge_userHost moge HostName moge.exampl...
エスケープがだるい• Remoteでsedやgrepするときにクォート が沢山あるとエスケープがだるい$ ssh host “`cmd.txt`”
パスフレーズがだるい • ssh-agentとssh-add  • keychainが使えるならそっちで$ eval `ssh-agent`$ ssh-add• ssh-agentとssh-add • keychainが使えるならそっちで
ssh-agent使い回し (1)• eval `ssh-agent`するとログアウトしても ssh-agentプロセスが残ります • セキュアにしたいならlogoutスクリプ   トで kill しましょう• シェルスクリプトの関数を書いて、...
ssh-agent使い回し (2)ssh-reagent () {  for agent in /tmp/ssh-*/agent.*; do    export SSH_AUTH_SOCK=$agent    if ssh-add -l 2>&...
多段SSH (1)• とあるゲートウェイを通らないと データセンター内のマシンへ入れない• めんどい• でかいファイルコピーとか、ゲート  ウェイのディスク容量を気にしないと  いけない、だるい
多段SSH (2)$ ssh -o ProxyCommand sshUSER@GATEWAY -W %h:%pUSER@INNER_HOSTHost *-proxy User user ProxyCommand ssh gateway -W %...
多段SSH (3)Host host3 ProxyCommand ssh host2 -W %h:%PHost host2 ProxyCommand ssh host1 -W %h:%PHost host1 User ore • ↑とかやっとく...
多段SSH (4)$ ssh -t GATEWAY ssh REMOTE• いちいち .ssh/config 書くのめんどいとき にでもどうぞ• -t しないとGATEWAYからのsshが例えば sudo -u USER ssh REMOTEだっ...
Port Forwarding (1)• localhostのportをRemoteのportに転送• Remoteのportをlocalhostのportに転送• 直接は見えないところにいるLAN内の サービスを、ssh経由で無理やりトンネ ...
Port Forwarding (2)• 踏み台経由でしかアクセスできない   Webサーバをlocalのブラウザでアクセス  $ sudo ssh -Nf -L80:HOST:80 GATEWAY• gateway経由でhost:80が127...
Port Forwarding (3)• 踏み台経由でしかアクセスできない  mysqlサーバをlocalで使う$ ssh -Nf -L13306:HOST:3306 GATEWAY$ mysql -uroot -p -P13306 -h127...
Port Forwarding (4) •   GATEWAY経由でしか入れないhostに、他     のhostからでかいファイルを送りつける$ ssh -fCN -L 10022:TARGET:22 USER@GATEWAY$ rsync ...
Resume機能つき転送$ rsync --partial --progress --rsh=sshSOURCE_FILE USER@HOST:DEST_FILE$ rsync --partial --progress --rsh=sshUSE...
認証とコマンド制限from=”!foo.example.com,*.example.com”, no-pty, command=”ls” ssh-rsaAAAAB3NzaC1yc2EAAAADAQ....... •   .ssh/authori...
Remote Diff$ ssh USER@HOST cat /path/to/remotefile | diff /path/to/localfile -Remote Disk Mount$ sshfs USER@HOST:/path/to/fo...
Remote Command       with screen$ ssh HOST screen -d -m /heavy/command     Login with screen$ ssh -t HOST [ $STY ] || scre...
公開                を安全にコピー$ ssh-copy-id     大量のサーバにssh$ pssh -h hostlist.txt -i “grep -ri err /var/log”※ http://freecode.co...
zsh+tmuxでsshしたら         新ウィンドウ# ~/.zshrcif [ $TERM = screen ]; then    function ssh_tmux() {        eval server=${$#}     ...
sshコネクション多重化# ~/.ssh/configControlMaster autoControlPath ~/.ssh/connections/%r@%h:%p •   普通はサーバー側にsshdが沢山あがります •   ↑これをやると1...
サーバー毎にエンコーディングが違う$ sudo (brew|port) install cocot$ cocot -t UTF-8 -p EUC-JP ssh HOST • cygwin版もあるっぽい • -t でターミナルの文字コード • -...
社内から外へはPROXY   経由しか開いてない! • stoneを使うOUTER$ sudo stone localhost:22 443INNER$ stone proxy.example.com:8080/http10022 ‘CONNE...
なんか認証できないとき• パーミッションを疑う • ~/ • ~/.ssh • ~/.ssh/authorized_keys • ~/.ssh/id_rsa• ssh -vvv• sshd -d
SSHがあればなんでもできる!!
まだまだ紹介しきれないほど機能が豊富物足りないあなたはLet’s “man ssh_config”
ご清聴ありがとうございました
SSH Tips & Tricks
SSH Tips & Tricks
Upcoming SlideShare
Loading in …5
×

SSH Tips & Tricks

8,719 views

Published on

第二回ターミナル勉強会 SSH Tips & Tricks

Published in: Technology

SSH Tips & Tricks

  1. 1. SSH tips & tricks 2012/03/26 第二回ターミナル勉強会 GREE Inc. Nobutoshi Ogata
  2. 2. • Oracleさんにお邪魔したらコーヒーが無 限に飲めました• Oracleさんにお邪魔したら身長が10cm 伸びました• Oracleさんにお邪魔したら彼女が出来 ました
  3. 3. はじめましての人は はじめまして
  4. 4. そうでない人は (多分)ご無沙汰してます
  5. 5. 前回
  6. 6. zshと仮想端末 マネージャで快適ターミナル生活
  7. 7. screen, tmux, zsh あたりの話をさせて頂きました
  8. 8. 改めて自己紹介• 尾形暢俊(おがたのぶとし)• http://twitter.com/nobu666• http://www.facebook.com/nobutoshi.ogata• GREE Inc. 開発本部インフラ統括部 アプリケーション基盤チーム
  9. 9. 本日はSSHの話を中心にしていきます
  10. 10. 「オレの*_historyが 火を吹くぜ」ということですが
  11. 11. 多分よーぞーさんとすずきさんで十分燃えたはずなので、オレの*_historyは火を吹きません
  12. 12. あとネタは今回特にないので淡々といきます
  13. 13. SSHは ただのbetter telnetではない
  14. 14. SSHでできること• セキュアなリモートログイン• 通信の暗号化• ポート転送• セキュアなファイル転送
  15. 15. ここからの前提• Linux• OpenSSH• SSH2プロトコル• sshdはtcp/22でLISTEN
  16. 16. リモートログイン• ssh -i USER -l ~/.ssh/id_rsa REMOTE• まぁ1-2台なら ↑この 書き方でも我慢できそう • ユーザーを使い分けたい • を使い分けたい
  17. 17. .ssh/configHost hoge HostName hoge.example.com IdentityFile ~/.ssh/id_rsa.hoge User hoge_userHost moge HostName moge.example.jp IdennityFile ~/.ssh/id_rsa.moge User moge_userHost * ForwardAgent yes ServerAliveInterval 200 ForwardX11 no
  18. 18. エスケープがだるい• Remoteでsedやgrepするときにクォート が沢山あるとエスケープがだるい$ ssh host “`cmd.txt`”
  19. 19. パスフレーズがだるい • ssh-agentとssh-add • keychainが使えるならそっちで$ eval `ssh-agent`$ ssh-add• ssh-agentとssh-add • keychainが使えるならそっちで
  20. 20. ssh-agent使い回し (1)• eval `ssh-agent`するとログアウトしても ssh-agentプロセスが残ります • セキュアにしたいならlogoutスクリプ トで kill しましょう• シェルスクリプトの関数を書いて、 残ったプロセスを使いまわす
  21. 21. ssh-agent使い回し (2)ssh-reagent () { for agent in /tmp/ssh-*/agent.*; do export SSH_AUTH_SOCK=$agent if ssh-add -l 2>&1 > /dev/null; then echo “Found working SSH Agent:” ssh-add -l return fi done echo “Cannot find ssh agent - maybe you shouldreconnect and forward it?”}
  22. 22. 多段SSH (1)• とあるゲートウェイを通らないと データセンター内のマシンへ入れない• めんどい• でかいファイルコピーとか、ゲート ウェイのディスク容量を気にしないと いけない、だるい
  23. 23. 多段SSH (2)$ ssh -o ProxyCommand sshUSER@GATEWAY -W %h:%pUSER@INNER_HOSTHost *-proxy User user ProxyCommand ssh gateway -W %h:%P※ sshクライアントのOpenSSHバージョン5.4 以上※ サーバー側のバージョンは関係ないです
  24. 24. 多段SSH (3)Host host3 ProxyCommand ssh host2 -W %h:%PHost host2 ProxyCommand ssh host1 -W %h:%PHost host1 User ore • ↑とかやっとくと、ssh host3 というだけ でhost1→host2→host3と経由してつなが ります
  25. 25. 多段SSH (4)$ ssh -t GATEWAY ssh REMOTE• いちいち .ssh/config 書くのめんどいとき にでもどうぞ• -t しないとGATEWAYからのsshが例えば sudo -u USER ssh REMOTEだった場合 ちょっと危険です
  26. 26. Port Forwarding (1)• localhostのportをRemoteのportに転送• Remoteのportをlocalhostのportに転送• 直接は見えないところにいるLAN内の サービスを、ssh経由で無理やりトンネ ルすることが可能
  27. 27. Port Forwarding (2)• 踏み台経由でしかアクセスできない Webサーバをlocalのブラウザでアクセス $ sudo ssh -Nf -L80:HOST:80 GATEWAY• gateway経由でhost:80が127.0.0.1:80へ転送 される • name base virtual hostの場合は /etc/hosts を適当に書き換える
  28. 28. Port Forwarding (3)• 踏み台経由でしかアクセスできない mysqlサーバをlocalで使う$ ssh -Nf -L13306:HOST:3306 GATEWAY$ mysql -uroot -p -P13306 -h127.0.0.1• 同じ要領でPOP3とかも転送可能
  29. 29. Port Forwarding (4) • GATEWAY経由でしか入れないhostに、他 のhostからでかいファイルを送りつける$ ssh -fCN -L 10022:TARGET:22 USER@GATEWAY$ rsync --bwlimit=25600 --progress -az -e “ssh -p10022” /path/to/large/file localhost:~/
  30. 30. Resume機能つき転送$ rsync --partial --progress --rsh=sshSOURCE_FILE USER@HOST:DEST_FILE$ rsync --partial --progress --rsh=sshUSER@HOST:SOURCE_FILE DEST_FILE• Resumeが必要なファイル転送ってこと は、ブツがでかいと思われるので必要 に応じて --bwlimit しましょう
  31. 31. 認証とコマンド制限from=”!foo.example.com,*.example.com”, no-pty, command=”ls” ssh-rsaAAAAB3NzaC1yc2EAAAADAQ....... • .ssh/authorized_keys • 192.168.0.?とか192.168.0.*とか192.168.0.0/24 とか • foo以外の*.example.comの でしか認証でき ず、仮想端末が取れない、かつlsが実行され るだけ
  32. 32. Remote Diff$ ssh USER@HOST cat /path/to/remotefile | diff /path/to/localfile -Remote Disk Mount$ sshfs USER@HOST:/path/to/folder /path/to/mount/point
  33. 33. Remote Command with screen$ ssh HOST screen -d -m /heavy/command Login with screen$ ssh -t HOST [ $STY ] || screen -rx ||screen -D -RR
  34. 34. 公開 を安全にコピー$ ssh-copy-id 大量のサーバにssh$ pssh -h hostlist.txt -i “grep -ri err /var/log”※ http://freecode.com/projects/pssh
  35. 35. zsh+tmuxでsshしたら 新ウィンドウ# ~/.zshrcif [ $TERM = screen ]; then function ssh_tmux() { eval server=${$#} tmux new-window -n $@ "exec ssh $@" } alias ssh=ssh_tmuxfi
  36. 36. sshコネクション多重化# ~/.ssh/configControlMaster autoControlPath ~/.ssh/connections/%r@%h:%p • 普通はサーバー側にsshdが沢山あがります • ↑これをやると1つのsshdが複数のsshの面倒 をみるようになります • コネクション確立済みなら認証不要
  37. 37. サーバー毎にエンコーディングが違う$ sudo (brew|port) install cocot$ cocot -t UTF-8 -p EUC-JP ssh HOST • cygwin版もあるっぽい • -t でターミナルの文字コード • -p で接続先の文字コード※ https://github.com/vmi/cocot
  38. 38. 社内から外へはPROXY 経由しか開いてない! • stoneを使うOUTER$ sudo stone localhost:22 443INNER$ stone proxy.example.com:8080/http10022 ‘CONNECT OUTER:443 HTTP/1.0’OUTER$ ssh -p 10022 localhost※ http://www.gcd.org/sengoku/stone/Welcome.ja.html
  39. 39. なんか認証できないとき• パーミッションを疑う • ~/ • ~/.ssh • ~/.ssh/authorized_keys • ~/.ssh/id_rsa• ssh -vvv• sshd -d
  40. 40. SSHがあればなんでもできる!!
  41. 41. まだまだ紹介しきれないほど機能が豊富物足りないあなたはLet’s “man ssh_config”
  42. 42. ご清聴ありがとうございました

×