SSH Tips & Tricks

  • 7,250 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,250
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
49
Comments
0
Likes
31

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. SSH tips & tricks 2012/03/26 第二回ターミナル勉強会 GREE Inc. Nobutoshi Ogata
  • 2. • Oracleさんにお邪魔したらコーヒーが無 限に飲めました• Oracleさんにお邪魔したら身長が10cm 伸びました• Oracleさんにお邪魔したら彼女が出来 ました
  • 3. はじめましての人は はじめまして
  • 4. そうでない人は (多分)ご無沙汰してます
  • 5. 前回
  • 6. zshと仮想端末 マネージャで快適ターミナル生活
  • 7. screen, tmux, zsh あたりの話をさせて頂きました
  • 8. 改めて自己紹介• 尾形暢俊(おがたのぶとし)• http://twitter.com/nobu666• http://www.facebook.com/nobutoshi.ogata• GREE Inc. 開発本部インフラ統括部 アプリケーション基盤チーム
  • 9. 本日はSSHの話を中心にしていきます
  • 10. 「オレの*_historyが 火を吹くぜ」ということですが
  • 11. 多分よーぞーさんとすずきさんで十分燃えたはずなので、オレの*_historyは火を吹きません
  • 12. あとネタは今回特にないので淡々といきます
  • 13. SSHは ただのbetter telnetではない
  • 14. SSHでできること• セキュアなリモートログイン• 通信の暗号化• ポート転送• セキュアなファイル転送
  • 15. ここからの前提• Linux• OpenSSH• SSH2プロトコル• sshdはtcp/22でLISTEN
  • 16. リモートログイン• ssh -i USER -l ~/.ssh/id_rsa REMOTE• まぁ1-2台なら ↑この 書き方でも我慢できそう • ユーザーを使い分けたい • を使い分けたい
  • 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. エスケープがだるい• Remoteでsedやgrepするときにクォート が沢山あるとエスケープがだるい$ ssh host “`cmd.txt`”
  • 19. パスフレーズがだるい • ssh-agentとssh-add • keychainが使えるならそっちで$ eval `ssh-agent`$ ssh-add• ssh-agentとssh-add • keychainが使えるならそっちで
  • 20. ssh-agent使い回し (1)• eval `ssh-agent`するとログアウトしても ssh-agentプロセスが残ります • セキュアにしたいならlogoutスクリプ トで kill しましょう• シェルスクリプトの関数を書いて、 残ったプロセスを使いまわす
  • 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. 多段SSH (1)• とあるゲートウェイを通らないと データセンター内のマシンへ入れない• めんどい• でかいファイルコピーとか、ゲート ウェイのディスク容量を気にしないと いけない、だるい
  • 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. 多段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. 多段SSH (4)$ ssh -t GATEWAY ssh REMOTE• いちいち .ssh/config 書くのめんどいとき にでもどうぞ• -t しないとGATEWAYからのsshが例えば sudo -u USER ssh REMOTEだった場合 ちょっと危険です
  • 26. Port Forwarding (1)• localhostのportをRemoteのportに転送• Remoteのportをlocalhostのportに転送• 直接は見えないところにいるLAN内の サービスを、ssh経由で無理やりトンネ ルすることが可能
  • 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. Port Forwarding (3)• 踏み台経由でしかアクセスできない mysqlサーバをlocalで使う$ ssh -Nf -L13306:HOST:3306 GATEWAY$ mysql -uroot -p -P13306 -h127.0.0.1• 同じ要領でPOP3とかも転送可能
  • 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. Resume機能つき転送$ rsync --partial --progress --rsh=sshSOURCE_FILE USER@HOST:DEST_FILE$ rsync --partial --progress --rsh=sshUSER@HOST:SOURCE_FILE DEST_FILE• Resumeが必要なファイル転送ってこと は、ブツがでかいと思われるので必要 に応じて --bwlimit しましょう
  • 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. 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. Remote Command with screen$ ssh HOST screen -d -m /heavy/command Login with screen$ ssh -t HOST [ $STY ] || screen -rx ||screen -D -RR
  • 34. 公開 を安全にコピー$ ssh-copy-id 大量のサーバにssh$ pssh -h hostlist.txt -i “grep -ri err /var/log”※ http://freecode.com/projects/pssh
  • 35. zsh+tmuxでsshしたら 新ウィンドウ# ~/.zshrcif [ $TERM = screen ]; then function ssh_tmux() { eval server=${$#} tmux new-window -n $@ "exec ssh $@" } alias ssh=ssh_tmuxfi
  • 36. sshコネクション多重化# ~/.ssh/configControlMaster autoControlPath ~/.ssh/connections/%r@%h:%p • 普通はサーバー側にsshdが沢山あがります • ↑これをやると1つのsshdが複数のsshの面倒 をみるようになります • コネクション確立済みなら認証不要
  • 37. サーバー毎にエンコーディングが違う$ sudo (brew|port) install cocot$ cocot -t UTF-8 -p EUC-JP ssh HOST • cygwin版もあるっぽい • -t でターミナルの文字コード • -p で接続先の文字コード※ https://github.com/vmi/cocot
  • 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. なんか認証できないとき• パーミッションを疑う • ~/ • ~/.ssh • ~/.ssh/authorized_keys • ~/.ssh/id_rsa• ssh -vvv• sshd -d
  • 40. SSHがあればなんでもできる!!
  • 41. まだまだ紹介しきれないほど機能が豊富物足りないあなたはLet’s “man ssh_config”
  • 42. ご清聴ありがとうございました