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

GolangでSSHプロキシサーバを実装した

tsurubee
October 04, 2018

 GolangでSSHプロキシサーバを実装した

tsurubee

October 04, 2018
Tweet

More Decks by tsurubee

Other Decks in Programming

Transcript

  1. !UTVSVCFF(.01FQBCP *OD
    'VLVPLBHP
    (PMBOHͰ44)ϓϩΩγαʔό
    Λ࣮૷ͨ͠

    View full-size slide

  2. ࣗݾ঺հ
    (.0ϖύϘגࣜձࣾ
    ϗεςΟϯάࣄۀ෦
    ΠϯϑϥνʔϜ
    ௽ాതจ !UTVSVCFF

    (PMBOH͸೥݄͔Β
    ࢝Ί·ͨ͠ʂ

    View full-size slide

  3. ࠓ೔࿩͢͜ͱ
    w44)ϓϩτίϧͷ֓ཁ
    w44)ϓϩΩγαʔόΛ։ൃͨ͠എܠ
    w44)ϓϩΩγαʔόͷ࣮૷ʹ͍ͭͯ

    View full-size slide

  4. w4FDVSF4IFMMͷུশ
    wΫϥΠΞϯτrαʔόؒʹ͓͚Δ௨৴ͷ҆શੑΛ֬อ͢Δ
    ͨΊͷϓϩτίϧ



    44)$MJFOU 44)4FSWFS
    &ODSZQU %FDSZQU
    ಁաతͳ҉߸ܦ࿏Λఏڙͯ͘͠ΕΔ
    44)ɿ֓ཁ

    View full-size slide

  5. 44)ɿಁաతͳ௨৴
    ಁաతʜ࣮ࡍʹଘࡏ͢Δ΋ͷΛଘࡏ͠ͳ͍Α͏ʹݟͤΔ
    44)͸Ϣʔβ͸Կ΋ҙࣝͤͣͱ΋௨৴͕҆શʹ҉߸Խɾ
    ෮߸Խ͞Ε͍ͯΔ
    ͢ͳΘͪɺ44)Λී௨ʹར༻͢Δ্Ͱͦͷ࢓૊ΈΛ

    ϓϩτίϧϨϕϧͰཧղ͢Δඞཁ͸ͳ͍

    View full-size slide

  6. ಁաతͳ௨৴Λఏڙͯ͘͠ΕΔϓϩτίϧʹҙਤతʹ
    ׂͬͯೖͬͯɺͦͷڍಈΛࣗ༝ʹίϯτϩʔϧ͢Δ

    View full-size slide

  7. $MJFOU 4FSWFS
    wϩάΛऔಘ͍ͨ͠ʢ౷ܭతʹղੳɾϦΞϧλΠϜҟৗݕ஌ FUDʣ

    UDQEQɺ1SPYZ42-
    wϑοΫΛ૊ΈࠐΜͰৼΔ෣͍Λಈతʹίϯτϩʔϧ͍ͨ͠

    QGUQɺTTIS
    ྫ͑͹ɾɾ
    ύέοτͷಡΈࠐΈ
    ϓϩτίϧͷղऍ
    QBDLFU
    IPPLTDSJQU ϑοΫʹΑΔϩδοΫͷ
    ֦ு΍ಈత੍ޚ
    ϓϩτίϧͷॲཧʹׂͬͯೖΔ

    View full-size slide

  8. TTISͱ͍͏44)ϓϩΩγαʔόΛ࡞ͬͯ·͢ʂ
    IUUQTCMPHUTVSVCFFUFDIFOUSZ

    View full-size slide

  9. ͳͥTTISΛ࡞ͬͨͷ͔ʁ

    View full-size slide

  10. Ϧιʔεϓʔϧ
    wֹ݄ԁ͔Βར༻Ͱ͖Δʂ
    w୆ͷ෺ཧαʔόͷϦιʔεΛෳ਺ͷϢʔβʹఏڙ͢Δʢڞ༻αʔόʣ
    UTVSVCFF
    Ϩϯλϧαʔόʔ
    EFW
    ෳ਺ͷϢʔβͷίϯςϯπ͕
    ϩʔΧϧετϨʔδʹ
    ഑ஔ͞Ε͍ͯΔ
    TTI
    TTI
    TTI
    TTI TTI
    TTIUTVSVCFF!TTI
    TTIEFW!TTI
    Ϣʔβ͸࢖༻Ͱ͖Δαʔό͕
    TTIͩͱ஌͍ͬͯΔඞཁ͕͋Δ
    ϢʔβͱͦͷϢʔβ͕࢖༻͢Δαʔόͷඥ෇͚͕ଘࡏ͢Δ

    View full-size slide

  11. αʔόఏڙऀଆͷطଘͷ՝୊
    TTIUTVSVCFF!TTI
    Ϧιʔεϓʔϧ
    44)$MJFOU
    TTI
    TTI
    TTI
    TTI
    TTI
    w࢖༻αʔό͕มΘͬͨࡍʹ͸Ϣʔβʹ௨஌͕ඞཁ
    wαʔό؅ཧऀͷ౎߹Ͱࣗ༝ʹϢʔβ͕࢖͏αʔόΛมߋͰ͖ͳ͍
    Ϣʔβ
    UTVSVCFF͸TTIʹ
    ҙࣝతʹ઀ଓ͍ͯ͠Δ
    UTVSVCFFͷίϯςϯπΛ
    TTIʹҠઃ͍ͨ͠

    View full-size slide

  12. Ϣʔβͱαʔόͷ഑ஔΛ࠷దԽ͠ɺ
    ͞Βʹշదͳαʔό؀ڥͷఏڙ΁
    ϢʔβͷίϯςϯπҠઃͷোนΛ
    ۃݶ·ͰԼ͛Δ

    View full-size slide

  13. wϢʔβ໊ϕʔεͰಈతʹ઀ଓઌΛܾఆͰ͖Δ
    wϑοΫʹΑΓϩδοΫΛࣗ༝ʹ૊ΈࠐΊΔFUD
    TTISɿϢʔβ͕઀ଓઌΛҙࣝ͠ͳ͍ϓϩΩγαʔό
    IUUQTHJUIVCDPNUTVSVCFFTTIS

    View full-size slide

  14. TTIUTVSVCFF!TTIS
    Ϧιʔεϓʔϧ
    44)ΫϥΠΞϯτ
    TTIS
    1MVHHBCMF
    )PPLT
    Ϣʔβ
    TTISಋೖޙͷੈք

    View full-size slide

  15. TTIUTVSVCFF!TTIS
    Ϧιʔεϓʔϧ
    44)ΫϥΠΞϯτ
    TTIS
    1MVHHBCMF
    )PPLT
    Ϣʔβ
    TTISಋೖޙͷੈք
    Ϣʔβ໊

    View full-size slide

  16. TTIUTVSVCFF!TTIS
    Ϧιʔεϓʔϧ
    44)ΫϥΠΞϯτ
    TTIS
    1MVHHBCMF
    )PPLT
    Ϣʔβ
    TTISಋೖޙͷੈք
    Ϣʔβ໊ ઀ଓઌϗετ
    Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ

    View full-size slide

  17. TTIUTVSVCFF!TTIS
    Ϧιʔεϓʔϧ
    44)ΫϥΠΞϯτ
    TTIS
    1MVHHBCMF
    )PPLT
    Ϣʔβ
    TTISಋೖޙͷੈք
    Ϣʔβ໊ ઀ଓઌϗετ
    Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ
    44)ΛϓϩΩγ

    View full-size slide

  18. TTIUTVSVCFF!TTIS
    Ϧιʔεϓʔϧ
    44)ΫϥΠΞϯτ
    Ϣʔβ໊ ઀ଓઌϗετ
    TTIS
    1MVHHBCMF
    )PPLT
    44)ΛϓϩΩγ
    Ϣʔβͱ઀ଓઌϗετͷඥ෇͚Λ%#ͰҰݩ؅ཧ
    Ϣʔβ
    TTISಋೖޙͷੈք
    %#ͷ6QEBUFʹΑΓࣗಈͰϢʔβͷ઀ଓઌ͕੾ΓସΘΔ

    View full-size slide

  19. TTISΛ࢖ͬͯΈΔͱʜ
    $ ssh [email protected] -p 2222
    [email protected]'s password:
    [tsurubee@host-tsurubee ~]$
    $ ssh [email protected] -p 2222
    [email protected]'s password:
    [dev@host-dev ~]$
    ࣮ߦ͢ΔίϚϯυ͸ʮϢʔβ໊ʯҎ֎ಉ͕ͩ͡ɺ
    ҧ͏αʔόʹ44)ϩάΠϯ͞ΕΔ

    View full-size slide

  20. TTISͷ࣮૷ʹ͍ͭͯ

    View full-size slide

  21. ·ͣɺϓϩτίϧΛ஌ΔͨΊʹ3'$ΛಡΉ
    w3'$ɿ44)"VUIFOUJDBUJPO1SPUPDPM

    Ϣʔβೝূʢύεϫʔυೝূ΍ެ։伴ೝূʣ
    w3'$ɿ44)5SBOTQPSU-BZFS1SPUPDPM

    τϥϯεϙʔτ૚
    w3'$ɿ44)$POOFDUJPO1SPUPDPM

    νϟωϧ੍ޚ΍ϙʔτϑΥϫʔσΟϯά
    44)͸ɺෳ਺ͷಠཱͨ͠ϓϩτίϧͰߏ੒͞ΕΔ

    View full-size slide

  22. 44)ϓϩτίϧͷ֊૚ߏ଄
    $MJFOU 4FSWFS
    44)$0// 3'$

    44)"65) 3'$

    44)53"/4 3'$

    ௨৴ͷ҉߸Խ
    ηογϣϯ伴ͷަ׵
    Ϣʔβೝূ
    νϟωϧͷଟॏԽ
    *OUFSOFU
    wϓϩτίϧͷશମ૾ͷ೺Ѳ΍ॲཧͷྲྀΕΛ௫Ή͜ͱ͕େ੾
    w44)ϓϩΩγαʔό͸ΫϥΠΞϯταʔόͷؒʹׂͬͯೖͬͯɺ
    ҉߸Խ͞Εͨτϥϯεϙʔτ૚Λ஥հ͢Δඞཁ͕͋Δ

    View full-size slide

  23. 44)ηογϣϯཱ֬·ͰͷྲྀΕ
    5$1ίωΫγϣϯͷཱ֬
    ύϥϝʔλωΰγΤʔγϣϯ
    ηογϣϯ伴ަ׵
    ϗετೝূʢαʔόೝূʣ
    Ϣʔβೝূ
    44)ηογϣϯͷཱ֬

    View full-size slide

  24. TTISͷॲཧͷྲྀΕ
    $MJFOU
    TTIS
    44)ϦΫΤετ

    View full-size slide

  25. TTISͷॲཧͷྲྀΕ
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵

    View full-size slide

  26. TTISͷॲཧͷྲྀΕ
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵
    'JOE6QTUSFBN)PPL

    View full-size slide

  27. TTISͷॲཧͷྲྀΕ
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵
    'JOE6QTUSFBN)PPL
    4FSWFS

    View full-size slide

  28. TTISͷॲཧͷྲྀΕ
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵
    'JOE6QTUSFBN)PPL
    4FSWFS
    τϥϯεϙʔτ૚ͷ҉߸Խ
    ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬

    View full-size slide

  29. TTISͷॲཧͷྲྀΕ
    4FSWFS
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ τϥϯεϙʔτ૚ͷ҉߸Խ
    'JOE6QTUSFBN)PPL
    ϢʔβೝূʹΑΔΫϥΠΞϯτͷਖ਼౰ੑ֬ೝ
    ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵

    View full-size slide

  30. TTISͷॲཧͷྲྀΕ
    4FSWFS
    $MJFOU
    TTIS
    44)ϦΫΤετ
    τϥϯεϙʔτ૚ͷ҉߸Խ τϥϯεϙʔτ૚ͷ҉߸Խ
    'JOE6QTUSFBN)PPL
    ϢʔβೝূʹΑΔΫϥΠΞϯτͷਖ਼౰ੑ֬ೝ
    ҉߸Խ͞Εͨτϥϯεϙʔτ૚ͷίωΫγϣϯཱ֬
    ύϥϝʔλωΰγΤʔγϣϯ
    %)伴ަ׵
    ೝূΛͲ͏΍Δ͔
    ͕໰୊ʂ

    View full-size slide

  31. Ϣʔβೝূͷ࣮૷ʹ
    ۤ͠Μͩɾɾ

    View full-size slide

  32. ϓϩΩγΛհͨ͠Ϣʔβೝূ
    TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ
    αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢
    4FSWFS
    $MJFOU
    TTIS
    ೝূϦΫΤετ
    ೝূϨεϙϯε

    View full-size slide

  33. ϓϩΩγΛհͨ͠Ϣʔβೝূ
    TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ
    αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢
    4FSWFS
    $MJFOU
    TTIS
    ύεϫʔυೝূ ⭕
    ೝূϦΫΤετ
    ೝূϨεϙϯε

    View full-size slide

  34. ϓϩΩγΛհͨ͠Ϣʔβೝূ
    TTIS͸ೝূϝοηʔδͷύέοτΛͦͷ··αʔόʹ౉͠ɺ
    αʔό͔ΒͷϨεϙϯεΛͦͷ··ΫϥΠΞϯτʹฦ͢
    4FSWFS
    $MJFOU
    TTIS
    ύεϫʔυೝূ
    ެ։伴ೝূ


    ೝূϦΫΤετ
    ೝূϨεϙϯε

    View full-size slide

  35. ެ։伴ೝূɿηογϣϯ*%໰୊
    $MJFOUTTISؒͱTTIS4FSWFSؒ͸ҟͳΔηογϣϯ*%Λ͍࣋ͬͯΔ
    4FSWFS
    $MJFOU
    TTIS
    ηογϣϯ*%YYY ηογϣϯ*%ZZZ
    ஈ֊ͷެ։伴ೝূ͕ඞཁ
    τϥϯεϙʔτ૚ͷ҉߸Խ
    伴ަ׵࣌ʹηογϣϯ͝ͱʹ
    Ұҙͳηογϣϯ*%͕ੜ੒͞
    Εɺσδλϧॺ໊ʹ࢖ΘΕΔ

    View full-size slide

  36. ެ։伴ೝূɿTTISͷ৔߹
    4FSWFS
    $MJFOU
    TTIS
    ެ։伴ͷొ࿥֬ೝ
    ʢ$IFDL1VCMJD,FZ)PPLʣ
    LFZ"
    LFZ#
    ൿີ伴ʹΑΔॺ໊
    ʢ'FUDI1SJWBUF,FZ)PPLʣ
    w$MJFOUTTISؒͱTTIS4FSWFSؒ͸ผͷΩʔϖΞͰެ։伴ೝূΛߦ͏
    wެ։伴ͷొ࿥֬ೝ΍ൿີ伴ʹΑΔॺ໊͸ϑοΫʹΑΓࣗ༝ʹ֦ுͰ͖Δ

    View full-size slide

  37. ·ͱΊ
    wಁաతͳ௨৴Λఏڙͯ͘͠ΕΔϓϩτίϧʹҙਤతʹׂͬͯ
    ೖΔ͜ͱͰɺͦͷڍಈΛࣗ༝ʹίϯτϩʔϧͰ͖Δ
    wTTISʹΑͬͯϢʔβ͕઀ଓઌΛҙࣝͤͣɺϢʔβ໊ϕʔεͰ
    ಈతʹ઀ଓઌΛಛఆͰ͖ΔΑ͏ʹͳΔ
    wϓϩΩγΛհͨ͠ެ։伴ೝূ͸ηογϣϯ*%ͷؔ܎Ͱஈ֊
    ʹެ։伴ೝূΛ͢Δඞཁ͕͋Δ

    View full-size slide

  38. ͝ਗ਼ௌ͋Γ͕ͱ͏
    ͍͟͝·ͨ͠ʂʂ

    View full-size slide