Upgrade to Pro — share decks privately, control downloads, hide ads and more …

sshの秘密鍵にpassphrase掛けない人と、 無闇やたらにsudoする人に、死の鉄槌を!!!!!!!!!!!!!!!!!!!!!!!!!!! #TechLunch

sshの秘密鍵にpassphrase掛けない人と、 無闇やたらにsudoする人に、死の鉄槌を!!!!!!!!!!!!!!!!!!!!!!!!!!! #TechLunch

sshの秘密鍵にpassphrase掛けない人と、 無闇やたらにsudoする人に、死の鉄槌を!!!!!!!!!!!!!!!!!!!!!!!!!!!
2013/02/06 (水) 12:00-13:00 @ Livesense TechLunch
発表者:松永 一郎

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.
PRO

April 21, 2014
Tweet

More Decks by Livesense Inc.

Other Decks in Technology

Transcript

  1. ssh agentの薦め より楽に、そしてある程度secureに

  2. まず質問 • agent使ってる人。 (場合によっては、このrc終了) • linux開発環境に入る毎に、sshの秘密鍵の認 証(パスワード入力)を行なっている人。 • ある環境から別環境(例えば、tanzaniaや、 viper等から本番等)にログインする為に、秘密

    鍵ファイルを各踏み台に転送している人。 • 先週、松阪氏がbash completeの話してたけ ど、scp、リモートのファイル名補完してくれない よね!! 駄目じゃんと思った人。
  3. それ、ssh agentを使うと簡単 基本unix系(含むOS X)の人の話ですが、puttyに もagentがあるんで、多分出来るはずです。 ssh agentとは、鍵の認証情報をローカルPCに保 持し、agentとログイン先のssh serverとの通信経 路を作ってくれ、エージェントとネゴをするような

    process(常駐? アプリ。) ローカルにある秘密鍵との認証情報も転送してく れるので、agent内の鍵がtimeoutするまでは、 agentが認証を肩代りしてくれる。
  4. None
  5. 普通の認証を図で説明 sshの起動毎に秘密鍵へアクセスし、パスワード入 力による復号を行なう。

  6. ssh agentを使った場合を図で説明 ようするにagentに鍵の認証情報が ある鍵り(笑う所!!)楽出来る。

  7. 三行でたのむ。 • 認証一回 • 各serverに秘密鍵不要 • (゚д゚)ウマー

  8. 御託はわかった。やりかたを教えろください。 ichiro@ichiro:~ $ ssh-add -l Could not open a connection

    to your authentication agent. ichiro@ichiro:~ $ ps auxww|grep ssh-agent ichiro 29177 0.0 0.0 14576 920 pts/8 S+ 02:10 0:00 grep ssh-agent ichiro@ichiro:~ $ eval $(ssh-agent) Agent pid 29188 ichiro@ichiro:~ $ ps auxww|grep ssh-agent ichiro 29188 0.0 0.0 12492 324 ? Ss 02:11 0:00 ssh-agent ichiro 29192 0.0 0.0 14576 920 pts/8 S+ 02:11 0:00 grep ssh-agent ichiro@ichiro:~ $ ssh-add -l The agent has no identities. $ ssh-add -t180 ~/.ssh/id_rsa_livesense Enter passphrase for /home/vikke/.ssh/id_rsa_livesense: Identity added: /home/vikke/.ssh/id_rsa_livesense (/home/vikke/.ssh/id_rsa_livesense) Lifetime set to 180 seconds ichiro@ichiro:~ $ ssh-add -t 180 ~/.ssh/id_dsa_mars Enter passphrase for /home/vikke/.ssh/id_dsa_mars: Identity added: /home/vikke/.ssh/id_dsa_mars (/home/vikke/.ssh/id_dsa_mars) Lifetime set to 180 seconds ichiro@ichiro:~ $ ssh-add -l 2048 15:1a:af:5c:b9:31:6b:6d:7c:4e:11:85:07:e9:e5:76 /home/vikke/.ssh/id_rsa_livesense (RSA) 1024 3a:de:8f:e8:75:21:77:b7:a2:79:6d:ed:1b:ed:5b:8e /home/vikke/.ssh/id_dsa_mars (DSA)
  9. 細かいんだ、う゛ぉけーーーー 実演

  10. bashrcにどう書くか。 接続周りの設定を.ssh/configに書く方法もありま すが、僕は.bashrc(がsourceするファイル)にまと めてます。

  11. bashrc (agent常駐部) # SSHのagent周りの設定 if ssh-add -l >/dev/null 2>&1 then

    : elif [ 2 == "$?" ] then export SSH_AUTH_SOCK=${HOME}/.ssh/sock.`hostname` if ssh-add -l > /dev/null 2>&1 then : elif [ 2 == "$?" -a ! "$SSH_CLIENT" ] then rm -f ${SSH_AUTH_SOCK} eval `ssh-agent -a ${SSH_AUTH_SOCK}` fi fi ============ いいわけ ==================================================================================== ちょっと冗長に見えますが、僕は同じ bashrcを各serverにばら撒いているので、 sshのagentが転送されているかどうかを判断したりするロジックが入ってい るので、こんな書き方になっています。 eval `ssh-agent`な書き方とか、thenの字下げが、ちょっと時代を感じさせますね。多分 10年位前に書いた部分ですね。 どっかで書き直したいと思います。というか、今回の為に見直してて、なんでこんな書き方になっているのか、ちょっと自分でも悩みました。 おそらくこんな書き方しなくても良いはずですが、まー、若気の至りとい (ry
  12. bashrc (鍵追加部) # ssh-agentへkeyを追加 function keyadd { ssh-add -l |

    grep "mars" > /dev/null if [ 1 == "$?" ] then echo "ssh key add" ssh-add -t 180m ~/.ssh/id_dsa_mars fi }
  13. bashrcから各環境依存ファイル読み込み ls ~/misc-env/*.sh >/dev/null 2>&1 if [ $? -eq 0

    ]; then for f in ~/misc-env/*.sh;do . ${f} done fi なぜ.bashrcに書かないかというと、僕は.bashrc等 をgithubに上げている関係で、securityを考え、こ のように分離しています。
  14. ~/misc-env/livesense.sh function dev { #keyadd eval ${cocot} -p UTF-8 --

    ssh -AY livesen@192.168.30.46 } function staging { eval ${cocot} -p UTF-8 -- ssh -AY matsunaga@192.168.30.22 } ....... ....... function l-mnt-dev { sshfs -o follow_symlinks livesen@192.168.30.46:/home/websites ~/mnt/dev } function l-umnt-dev { umount ~/mnt/dev } -Aでagentの転送を行なっています。 -YはX windowを転送する為の設定です。 って、keyadd使ってないじゃないですかーーーーー。 どうもubuntuの(というかgnomeの)keyring managerとバッティングしちゃうんで、 今、ssh-agentは使っておらず、gnomeのkeyring managerを使ってる(はずで す。細かい調査してません。時間取れしだいやります。ごめんなさいごめんなさいご めんなさいごめんなさいごめんなさい。)
  15. あとは繋ぐだけ $ dev とかやれば繋がる。

  16. 一応、リスクの話 agentと通信をしているsocketは700で自分持ちに なってますが、rootだと覗けます。 まー、秘密鍵奪うよりは大変ですが、一応、乗っと られる可能性は残ります。 でも、秘密鍵をserverに置くよりは良いでしょう。

  17. None