ssh tips & tricks

44
SSH tips & tricks 2012/03/26 第二回ターミナル勉強会 GREE Inc. Nobutoshi Ogata

Upload: nobutoshi-ogata

Post on 24-May-2015

7.535 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: SSH Tips & Tricks

SSH tips & tricks

2012/03/26 第二回ターミナル勉強会

GREE Inc.Nobutoshi Ogata

Page 2: SSH Tips & Tricks

• Oracleさんにお邪魔したらコーヒーが無限に飲めました

• Oracleさんにお邪魔したら身長が10cm

伸びました

• Oracleさんにお邪魔したら彼女が出来ました

Page 3: SSH Tips & Tricks
Page 4: SSH Tips & Tricks

はじめましての人ははじめまして

Page 5: SSH Tips & Tricks

そうでない人は(多分)

ご無沙汰してます

Page 6: SSH Tips & Tricks

前回

Page 7: SSH Tips & Tricks
Page 8: SSH Tips & Tricks

zshと仮想端末マネージャで

快適ターミナル生活

Page 9: SSH Tips & Tricks

screen, tmux, zshあたりの話をさせて頂きました

Page 10: SSH Tips & Tricks

改めて自己紹介

• 尾形暢俊(おがたのぶとし)

• http://twitter.com/nobu666

• http://www.facebook.com/nobutoshi.ogata

• GREE Inc. 開発本部インフラ統括部アプリケーション基盤チーム

Page 11: SSH Tips & Tricks

本日はSSHの話を中心にしていきます

Page 12: SSH Tips & Tricks

「オレの*_historyが火を吹くぜ」

ということですが

Page 13: SSH Tips & Tricks

多分よーぞーさんとすずきさんで十分燃えたはずなので、オレの*_historyは火を吹きません

Page 14: SSH Tips & Tricks

あとネタは今回特にないので淡々といきます

Page 15: SSH Tips & Tricks

SSHはただの

better telnetではない

Page 16: SSH Tips & Tricks

SSHでできること

• セキュアなリモートログイン

• 通信の暗号化

• ポート転送

• セキュアなファイル転送

Page 17: SSH Tips & Tricks

ここからの前提

• Linux

• OpenSSH

• SSH2プロトコル

• sshdはtcp/22でLISTEN

Page 18: SSH Tips & Tricks

リモートログイン• ssh -i USER -l ~/.ssh/id_rsa REMOTE

• まぁ1-2台なら ↑この書き方でも我慢できそう

• ユーザーを使い分けたい

• 鍵を使い分けたい

Page 19: SSH Tips & Tricks

.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

Page 20: SSH Tips & Tricks

エスケープがだるい• Remoteでsedやgrepするときにクォートが沢山あるとエスケープがだるい

$ ssh host “`cmd.txt`”

Page 21: SSH Tips & Tricks

パスフレーズがだるい• ssh-agentとssh-add

• keychainが使えるならそっちで

$ eval `ssh-agent`$ ssh-add

• ssh-agentとssh-add

• keychainが使えるならそっちで

Page 22: SSH Tips & Tricks

ssh-agent使い回し (1)

• eval `ssh-agent`するとログアウトしてもssh-agentプロセスが残ります

• セキュアにしたいならlogoutスクリプトで kill しましょう

• シェルスクリプトの関数を書いて、残ったプロセスを使いまわす

Page 23: SSH Tips & Tricks

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 should reconnect and forward it?”}

Page 24: SSH Tips & Tricks

多段SSH (1)

• とあるゲートウェイを通らないとデータセンター内のマシンへ入れない

• めんどい

• でかいファイルコピーとか、ゲートウェイのディスク容量を気にしないといけない、だるい

Page 25: SSH Tips & Tricks

多段SSH (2)$ ssh -o 'ProxyCommand ssh USER@GATEWAY -W %h:%p' USER@INNER_HOST

Host *-proxy User user ProxyCommand ssh gateway -W %h:%P

※ sshクライアントのOpenSSHバージョン5.4 以上※ サーバー側のバージョンは関係ないです

Page 26: SSH Tips & Tricks

多段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と経由してつながります

Page 27: SSH Tips & Tricks

多段SSH (4)

$ ssh -t GATEWAY ssh REMOTE

• いちいち .ssh/config 書くのめんどいときにでもどうぞ

• -t しないとGATEWAYからのsshが例えばsudo -u USER ssh REMOTEだった場合ちょっと危険です

Page 28: SSH Tips & Tricks

Port Forwarding (1)

• localhostのportをRemoteのportに転送

• Remoteのportをlocalhostのportに転送

• 直接は見えないところにいるLAN内のサービスを、ssh経由で無理やりトンネルすることが可能

Page 29: SSH Tips & Tricks

Port Forwarding (2)

$ sudo ssh -Nf -L80:HOST:80 GATEWAY

• gateway経由でhost:80が127.0.0.1:80へ転送される

• name base virtual hostの場合は /etc/hosts

を適当に書き換える

• 踏み台経由でしかアクセスできないWebサーバをlocalのブラウザでアクセス

Page 30: SSH Tips & Tricks

Port Forwarding (3)• 踏み台経由でしかアクセスできない

mysqlサーバをlocalで使う

$ ssh -Nf -L13306:HOST:3306 GATEWAY$ mysql -uroot -p -P13306 -h127.0.0.1

• 同じ要領でPOP3とかも転送可能

Page 31: SSH Tips & Tricks

Port Forwarding (4)

• GATEWAY経由でしか入れないhostに、他のhostからでかいファイルを送りつける

$ ssh -fCN -L 10022:TARGET:22 USER@GATEWAY$ rsync --bwlimit=25600 --progress -az -e “ssh -p 10022” /path/to/large/file localhost:~/

Page 32: SSH Tips & Tricks

Resume機能つき転送$ rsync --partial --progress --rsh=ssh SOURCE_FILE USER@HOST:DEST_FILE

$ rsync --partial --progress --rsh=ssh USER@HOST:SOURCE_FILE DEST_FILE

• Resumeが必要なファイル転送ってことは、ブツがでかいと思われるので必要に応じて --bwlimit しましょう

Page 33: SSH Tips & Tricks

認証とコマンド制限from=”!foo.example.com,*.example.com”, no-pty, command=”ls” ssh-rsa AAAAB3NzaC1yc2EAAAADAQ.......

• .ssh/authorized_keys

• 192.168.0.?とか192.168.0.*とか192.168.0.0/24とか

• foo以外の*.example.comの鍵でしか認証できず、仮想端末が取れない、かつlsが実行されるだけ

Page 34: SSH Tips & Tricks

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

Page 35: SSH Tips & Tricks

Remote Command with screen

$ ssh HOST screen -d -m /heavy/command

Login with screen$ ssh -t HOST [ $STY ] || screen -rx || screen -D -RR

Page 36: SSH Tips & Tricks

公開鍵を安全にコピー$ ssh-copy-id

大量のサーバにssh

$ pssh -h hostlist.txt -i “grep -ri err /var/log”

※ http://freecode.com/projects/pssh

Page 37: SSH Tips & Tricks

zsh+tmuxでsshしたら新ウィンドウ

# ~/.zshrcif [ $TERM = screen ]; then function ssh_tmux() { eval server=\${$#} tmux new-window -n $@ "exec ssh $@" } alias ssh=ssh_tmuxfi

Page 38: SSH Tips & Tricks

sshコネクション多重化# ~/.ssh/configControlMaster autoControlPath ~/.ssh/connections/%r@%h:%p

• 普通はサーバー側にsshdが沢山あがります

• ↑これをやると1つのsshdが複数のsshの面倒をみるようになります

• コネクション確立済みなら認証不要

Page 39: SSH Tips & Tricks

サーバー毎にエンコーディングが違う$ sudo (brew|port) install cocot$ cocot -t UTF-8 -p EUC-JP ssh HOST

• cygwin版もあるっぽい• -t でターミナルの文字コード• -p で接続先の文字コード

※ https://github.com/vmi/cocot

Page 40: SSH Tips & Tricks

社内から外へはPROXY

経由しか開いてない!• stoneを使う

OUTER$ sudo stone localhost:22 443INNER$ stone proxy.example.com:8080/http 10022 ‘CONNECT OUTER:443 HTTP/1.0’

OUTER$ ssh -p 10022 localhost

※ http://www.gcd.org/sengoku/stone/Welcome.ja.html

Page 41: SSH Tips & Tricks

なんか認証できないとき

• パーミッションを疑う• ~/• ~/.ssh• ~/.ssh/authorized_keys• ~/.ssh/id_rsa• ssh -vvv• sshd -d

Page 42: SSH Tips & Tricks

SSHがあればなんでもできる!!

Page 43: SSH Tips & Tricks

まだまだ紹介しきれないほど機能が豊富

物足りないあなたはLet’s “man ssh_config”

Page 44: SSH Tips & Tricks

ご清聴ありがとうございました