Share
Embed
Transcript
25 slides
-
͘͞ΒΠϯλʔωοτגࣜձࣾ (C) Copyright 1996-2019 SAKURA Internet Inc ͘͞ΒΠϯλʔωοτݚڀॴ sshr: ϢʔβʹมߋΛཁٻͤͣʹ
γεςϜมԽʹैՄೳͳSSHϓϩΩγαʔό 2019/12/06 ୈ12ճ Πϯλʔωοτͱӡ༻ٕज़γϯϙδϜʢIOTS 2019ʣ ɹా തจɼদຊ ྄հ ͘͞ΒΠϯλʔωοτגࣜձࣾ ͘͞ΒΠϯλʔωοτݚڀॴ -
4 มԽ͕ٻΊΒΕΔITΠϯϑϥ • WebαʔϏεͷΑ͏ͳΠϯλʔωοτΛհͯ͠ར༻͢ΔαʔϏε͕ੈͷதʹීٴ ͠ɼͦͷར༻ऀ͕૿େ͍ͯ͠Δɽ • WebαʔϏεΛࢧ͑ΔΠϯϑϥɼར༻ऀ͔Βͷଟ༷ͳཁٻڥͷมԽʹ Ԡͯ͡ɼਝ͔ͭॊೈʹγεςϜߏΛมߋ͢Δ͜ͱ͕ٻΊΒΕΔɽ ཁٻɾڥͷมԽ γεςϜଆͷରԠྫ
ΞΫηεͷ૿ݮ αʔόͷεέʔϧΞτɾεέʔϧΠϯ ސ٬χʔζͷมԽ αʔϏεͷػೳ֦ுͷͨΊͷ৽نαʔόಋೖ ϋʔυΣΞো αʔόͷϚΠάϨʔγϣϯ -
5 ssh username@<hostname or IP> SSH Client • αʔϏεͷଟ༷ͳཁٻʹԠͯ͡γεςϜߏΛਝʹมߋ͍ͯ͘͜͠ͱ͕ٻΊΒ ΕΔঢ়گʹ͓͍ͯɼγεςϜͷӡ༻ཧมߋʹैͰ͖Δඞཁ͕͋Δɽ
• Ұํɼ҆શͳϦϞʔτଓαʔϏεͱͯ͠αʔόཧʹ͘ར༻͞Ε͍ͯΔSSH ɼϢʔβ͕ར༻͢ΔαʔόͷIPΞυϨε·ͨϗετ໊Λࢦఆͯ͠ଓཁٻΛૹΔ ΈͰ͋Δɽ มԽʹैͰ͖Δӡ༻ཧ ͜͜ͰͷϢʔβͱɼγεςϜͷಛఆͷαʔόͷϦιʔεΛ༻͢Δऀ ɾγεςϜͷཧऀɾ։ൃऀ ɾϗεςΟϯάαʔϏεͷར༻ऀɼetc. Ϣʔβ มߋ Server Server αʔόͷIPΞυϨεɾ ϗετ໊ͷมߋͳͲ Ϣʔβ͕มߋޙͷใ ΛΔඞཁ͕͋Δ -
8 طଘख๏ͷྨ γεςϜͷߏมߋʹै͢ΔׂΛͲ͕͜୲͏͔ʹΑΓҎԼͷ2ͭʹྨͰ͖Δɽ 1. ΫϥΠΞϯτπʔϧ 2. ϓϩΩγαʔό SSH αʔό ϓϩΩγ
αʔό ཧσʔλ SSH ΫϥΠΞϯτ SSH αʔό ཧσʔλ ᶃ ᶄ ᶃ ᶄ ᶅ ྫ: gcloudίϚϯυ , consult ྫ: SSHPiper , sshdͷ֦ு SSHϦΫΤετ͝ͱʹৗʹ࠷৽ʹอͨΕͨγεςϜͷߏใΛอ࣋͢Δཧσʔλ Λࢀর͢Δ͜ͱͰมߋʹै͢Δɽ SSH ΫϥΠΞϯτ SSHΫϥΠΞϯτ͕͍࣋ͬͯΔ ԿΒ͔ͷΩʔใΛݩʹཧ σʔλΛݕࡧ͠ɼଓ͖͢ SSHαʔόͷใΛऔಘ͢Δɽ -
9 1. ΫϥΠΞϯτπʔϧ gcloudίϚϯυ • gcloudGCP্ͷϦιʔεΛૢ࡞͢Δओཁͳ ίϚϯυϥΠϯπʔϧ • ʮgcloud compute
sshʯίϚϯυʹΠϯελϯε໊Λࢦఆ͢Δ͜ͱͰɼରͷΠϯελϯεʹ SSHଓ͕Մೳ • ssh(1)ίϚϯυͷϥούʔͰ͋ΓɼSSHͷϦΫΤετΛૹΔલʹΠϯελϯε໊ΛΩʔʹGCP ͕ཧ͍ͯ͠Δߏใ͔ΒIPΞυϨεΛऔಘ͢ΔػೳΛ༗͍ͯ͠Δɽ • ϢʔβࣗͰఆٛͨ͠αʔό͝ͱʹҰҙͷΠϯελϯε໊Λ͍ͬͯΕɼରαʔόͷIP ΞυϨεͷใͦͷมߋΛҙࣝ͢Δ͜ͱͳ͘ಁաతʹSSHଓ͕ՄೳͰ͋Δɽ SSH ΫϥΠΞϯτ SSH αʔό ཧσʔλ ᶃ ᶄ ՝ Ϣʔβʹ༻͍ΔΫϥΠΞϯτπʔϧΛڧ੍͢Δɼ͔ͭπʔϧͷ༷มߋʹ͍ όʔδϣϯΞοϓͷมߋΛཁٻ͢Δɽ -
10 2. ϓϩΩγαʔό • GitHub্ͰΦʔϓϯιʔειϑτΣΞͱͯ͠ ։ൃ͞Ε͍ͯΔSSHͷϓϩΩγαʔό • SSHͷϦΫΤετΛड͚ͨࡍʹɼSSHͷϢʔβ໊͔Βར༻͢ΔଓઌαʔόΛܾఆͰ͖ΔػೳΛ ༗͢Δɽ •
Ϣʔβ͕༻͍ΔΫϥΠΞϯτπʔϧͷ੍ݶมߋΛ՝͞ͳ͍ɽ • ϢʔβɼϓϩΩγαʔόͷIPΞυϨεɾϗετ໊͍͑ͬͯ͞Εɼଓ͢ΔαʔόͷIPΞυ Ϩεɾϗετ໊ͦͷมߋΛҙࣝͤͣɼϢʔβ໊ʹඥ͍ͮͨαʔόʹಁաతʹSSHଓͰ͖Δɽ ཧσʔλ ᶃ ᶅ ϓϩΩγ αʔό SSHPiper ଓઌαʔόΛܾఆ͢ΔϩδοΫΛγεςϜཧऀ͕ࣗ༝ʹΈࠐΉ͜ͱมߋ͢Δ͜ͱ͕Ͱ͖ ͣɼϩδοΫΛมߋ͢ΔͨΊʹιʔείʔυʹมߋΛՃ͑ͳ͚ΕͳΒͳ͍ͨΊɼγες Ϝͷ༷มߋʹର͢Δ֦ுੑ͕͍ɽ ᶄ SSH αʔό SSH ΫϥΠΞϯτ ՝ -
12 ΞʔΩςΫνϟͷ֓ཁ γεςϜཧऀ͕ࣗ༝ʹΈࠐΈՄೳͳϑοΫؔΛ༻͍ͯγεςϜมԽʹैͰ͖Δ SSHϓϩΩγαʔόΛఏҊ͢Δ • Ϣʔβʹ༻͍ΔΫϥΠΞϯτπʔϧͷ੍ݶมߋΛ՝͞ͳ͍ • ΈࠐΉϑοΫؔͷΈͷमਖ਼ͰϓϩΩγαʔόͷಈ࡞Λࣗ༝ʹม͑ΒΕΔͨΊɼ γεςϜͷ༷มߋʹରͯ͠ߴ͍֦ுੑΛ༗͢Δ طଘSSHϓϩΩγαʔό
ͱಉ͡ར SSHΫϥΠΞϯτ ssh username@hostname Ϣʔβ໊ ଓઌϗετ ཧσʔλ ϑοΫؔ SSH ϓϩΩγαʔό αʔό܈ -
13 ΈࠐΈՄೳͳϑοΫؔ • ϑοΫؔSSHϦΫΤετ͝ͱʹຖճ࣮ߦ͞ΕΔ • SSHͷϢʔβ໊ΛͱʹଓઌαʔόͷIPΞυϨεɾϗετ໊Λऔಘ͢Δؔ • ܾఆͨ͠ଓઌαʔόͱΫϥΠΞϯτؒͷެ։伴ೝূΛ֦ு͢ΔͨΊͷؔ • ͜ΕΒΛ༻͍ΔͱɼSSHϓϩΩγαʔόʹ͓͚Δଓઌͷܾఆ͓Αͼެ։伴ೝূΛ
ϓϩάϥϚϒϧʹ֦ுͰ͖Δɽ • ϑοΫؔʹΑΔ֦ுੑʹΑΓɼҎԼͷબੑ͕ੜ·ΕΔ • Ϣʔβͱαʔόͷඥ͚ใɼೝূʹ༻͍Δ伴ͳͲͷཧσʔλΛσʔλϕʔ εɾಠࣗͷઃఆϑΝΠϧͷࣗ༝ͳσʔλܗࣜͰཧͰ͖Δɽ • ཧσʔλΛऔಘ͢Δํ๏ΛWeb APIܦ༝ʹ͢ΔͳͲɼσʔλͷऔಘํ๏Λࣗ༝ ʹબͰ͖Δɽ -
14 ϢʔβೝূͷΈ SSH ΫϥΠΞϯτ SSH αʔό SSHϓϩΩγ ύεϫʔυೝূํࣜ ެ։伴ೝূํࣜ SSH
αʔό ೝূϦΫΤετ ೝূϨεϙϯε SSHϓϩΩγSSHαʔόʹύέοτ Λసૹ͢ΔͷΈͰ͋ΓɼSSHαʔό͕ ೝূΛߦ͏ SSHϓϩΩγ Session ID: xxx Session ID: yyy ηογϣϯ͝ͱʹҰҙͷࣝผࢠΛؚΊ ͨσʔλΛൿີ伴Ͱॺ໊͠ɼೝূϦΫ ΤετΛૹΔͨΊɼSSHϓϩΩγೝূ ΛSSHαʔόʹͤΔ͜ͱ͕Ͱ͖ͳ͍ɽ ผͷൿີ伴Λ༻͍ͨ2ஈ֊ͷೝূ SSHϓϩΩγ͕ެ։伴 ݕࡧͷϑοΫؔΛ༻ ͍ͯΫϥΠΞϯτͷೝ ূΛߦ͏ɽ 1ஈ֊ SSHαʔόʹSSHϓϩΩγ ͕อ࣋͢Δಛఆͷൿີ伴 Λશͯड͚ೖΕΔΑ͏ʹ ઃఆ͓ͯ͘͠ 2ஈ֊ SSH ΫϥΠΞϯτ -
15 SSHϓϩΩγαʔόɿsshr • ఏҊ͢ΔΞʔΩςΫνϟΛ࣮ݱ͢ΔͨΊʹɼGoݴޠΛ༻͍ͯsshrͱ͍͏SSHϓϩΩγ αʔόΛOSSͱͯ͠։ൃ※1 • γεςϜཧऀ͕GoݴޠͰ࣮ͨؔ͠ΛΈࠐΜͰϏϧυ͢Δ͜ͱͰɼϓϩΩγ αʔόͷػೳΛ֦ுͰ͖ΔΈΛͱ͍ͬͯΔɽ ΈࠐΈՄೳͳϑοΫؔ ໊ؔ
ׂ/ఆ͞ΕΔॲཧ FindUpstreamHook Ϣʔβ໊ΛΩʔʹଓઌαʔόͷIPΞυϨε·ͨ ϗετ໊ΛσʔλϕʔεWeb APIܦ༝Ͱऔಘ FetchAuthorizedKeysHook Ϣʔβͷެ։伴ΛσʔλϕʔεWeb APIܦ༝Ͱ औಘ FetchPrivateKeyHook sshrαʔόͷϩʔΧϧετϨʔδʹอ͞Ε͍ͯ Δൿີ伴Λऔಘ ϦΫΤετͷॲཧͷաఔ Ͱ͜ΕΒͷϑοΫ͕ؔ ॱ࣍ݺͼग़͞ΕΔ ※1 https://github.com/tsurubee/sshr -
16 ηΩϡϦςΟϦεΫ • ύεϫʔυೝূํࣜͷ߹ • sshrαʔόSSHαʔόʹύέοτΛసૹ͢ΔͷΈͰ͋ΓɼϢʔβͷύεϫʔ υΛ͍ͬͯͯɼೝূΛߦ͏͜ͱ͕Ͱ͖ΔͷSSHαʔόͷΈͰ͋ΔͨΊɼ sshrαʔόΛ༻͍ͨ߹ͰೝূΛಥഁ͞ΕΔϦεΫมΘΒͳ͍ɽ • ެ։伴ೝূํࣜͷ߹
• sshrαʔόͷηΩϡϦςΟͷsshrσʔϞϯͷ੬ऑੑͳͲ͕ݪҼͰ • sshrαʔό͕༗͍ͯ͠Δൿີ伴͕ྲྀग़͢Δɽ • sshrαʔό͔Βൿີ伴Λར༻ͨ͠ҙͷίϚϯυ͕࣮ߦ͞ΕΔɽ -
17 ηΩϡϦςΟରࡦ sshrαʔόଆ SSHαʔόଆ ɹରࡦ ޮՌ αʔόʹϩάΠϯՄೳͳϢʔβͷ ݖݶɼΞΫηεՄೳͳIPΛ࠷খݶʹߜΔ ൿີ伴ͷྲྀग़Λ͙ sshrσʔϞϯrootݖݶΛ࣋ͨͳ͍Ϣʔβ
Ͱ࣮ߦ͢Δ ҙͷίϚϯυ͕࣮ߦ͞Εͨ߹ʹsshrαʔόʹ ର͢Δૢ࡞Λ੍ݶ͢Δ ɹରࡦ ޮՌ rootͰϦϞʔτϩάΠϯΛڐՄ͠ͳ͍ઃఆ ྫʣsshd_configͷPermitRootLogin SSHαʔόʹର͢Δૢ࡞ͷݖݶΛ੍ݶ͢Δ sshrͷൿີ伴ʹର͢ΔଓݩIP੍ݶ ྫʣauthorized_keysͷIP੍ݶػೳ ൿີ伴͕֎෦ʹྲྀग़ͨ͠ࡍͷඃΛ͙ -
20 ࣮ݧ༰ͱ݅ sshrΛհ͞ͳ͍ΫϥΠΞϯτͱαʔόؒͷଓʢӈਤ1ʣͱɼ ఏҊख๏Ͱ͋ΔsshrΛհͨ͠ଓʢӈਤ2ʣͰൺֱΛߦ͏ɽ ҎԼͷ2ύλʔϯͷ࣮ߦ࣌ؒͷଌఆΛߦ͏ ɹ1. unameίϚϯυΛ࣮ߦͨ͠߹ ɹ2. scpʢsecure copyʣʹΑΓϑΝΠϧΛసૹͨ͠߹
࣮ݧ༰ • ༻͍Δ࣮ݧڥӈදࢀর • ΫϥΠΞϯτɾαʔόؒͷೝূʹެ։伴ೝূΛ༻͍Δ • sshr͕࣮ߦ͢ΔϑοΫؔɼଓઌͷܾఆॲཧ͓Αͼ Ϣʔβͷެ։伴ݕࡧͷॲཧͷ͍ͣΕʹ͓͍ͯɼผαʔό ্ͷσʔλϕʔε͔Βࢀর͢Δͷͱ͢Δ • σʔλϕʔεతͷϨίʔυҎ֎Λؚ·ͳ͍ͷͱ͢Δ ڥɾ݅ -
21 unameίϚϯυͷ࣮ߦ unameίϚϯυ࣮ߦ࣌ؒͷଌఆ݁Ռ ※ ࣮ߦ࣌ؒશͯ100ճଌఆͷฏۉ ※ +22msec • ΫϥΠΞϯτɾαʔόؒͷSSHଓʹରͯ͠sshrΛհͨ͠߹ɼunameίϚϯυ࣮ߦͷ Φʔόʔϔου22msecͰ͋Δ͜ͱ͕͔ͬͨɽ
• ͜Εηογϣϯཱ֬࣌ʹ࣮ߦ͞ΕΔϑοΫؔʢࠓճͷ߹2ճͷσʔλϕʔεݕࡧʣ ͕Өڹ͍ͯ͠Δͱߟ͑ΒΕΔɽ • sshrΛհ͢Δ͜ͱͰൃੜ͢ΔΦʔόʔϔουɼSSHηογϣϯཱ֬࣌ʹϢʔβ͕Ԇ Λײ͡ͳ͍΄Ͳ͍࣌ؒͰ͋Δɽ -
22 scpʹΑΔϑΝΠϧసૹ scpʹΑΓసૹ͢ΔϑΝΠϧͷαΠζͱ సૹ࣌ؒͷؔ • 20MBͷϑΝΠϧΛసૹ͢Δ߹ɼsshrΛհ͢Δ͜ͱͰൃੜ͢Δ Φʔόʔϔου48ϛϦඵͰ͋ΓunameίϚϯυ࣮ߦͷ݁Ռ ΑΓେ͖͍ɽ • సૹ͢ΔϑΝΠϧαΠζ͕େ͖͘ͳΔʹͭΕͯɼൃੜ͢Δ
Φʔόʔϔου͕େ͖͘ͳΔ͜ͱ͔ΒɼsshrΛհ͢Δ߹ɼ sshrαʔό͕ύέοτΛϑΥϫʔυΛ͢Δ͜ͱʹΑΔΦʔόʔ ϔου͕Өڹ͍ͯ͠Δͱߟ͑ΒΕΔɽ • ͔͠͠ͳ͕Βɼྫ͑100MBͷϑΝΠϧసૹͷ߹ʹண͢Δ ͱɼసૹ࣌ؒͷ૿ՃΘ͔ͣ0.9%ఔͰ͋Γɼશମͷసૹ࣌ ؒʹରͯ͠sshrΛհ͢Δ͜ͱͰൃੜ͢ΔΦʔόʔϔου͕ΊΔ ׂ߹ۃΊͯখ͍͞ɽ -
23 ࣮ڥͷద༻ • Ϣʔβ͕ෳͷαʔό܈ͷத͔Βಛఆͷαʔόʹରͯ͠SSHϩάΠϯ͠ɼαʔόͷૢ࡞Λ ߦ͏͜ͱɼϑΝΠϧΛసૹ͢ΔΑ͏ͳαʔόཧΛఆͨ͠߹ɼsshrͷΦʔόϔου ࣮༻ʹेʹ͑͏Δ΄Ͳখ͍͞ɽ • ҰํɼsshrͰॲཧͷաఔͰɼσʔλϕʔεͷཧσʔλ͔Βଓઌαʔόެ։伴Λ ݕࡧ͢ΔͨΊɼσʔλϕʔεWeb APIͷԠ͕࣌ؒେ͖͍߹ɼͦΕʹ͍sshrΛ
հͨ͠SSHηογϣϯཱ֬ʹ͔͔Δ࣌ؒ͘ͳΔɽͦͷ߹ɼԠ࣌ؒΛ͘͢Δର ࡦΛߦ͏ඞཁ͕͋Δɽ -
25 ·ͱΊ • ຊݚڀͰɼϢʔβʹ༻͍ΔΫϥΠΞϯτπʔϧͷ੍ݶมߋΛཁٻͤͣɼγε ςϜཧऀ͕ࣗ༝ʹΈࠐΈՄೳͳϑοΫؔΛ༻͍ͯγεςϜมԽʹैͰ͖ Δsshrͱ͍͏SSHϓϩΩγαʔόΛఏҊͨ͠ɽ • ఏҊख๏ɼΈࠐΉϑοΫؔͷΈͷमਖ਼ͰϓϩΩγαʔόͷಈ࡞Λࣗ༝ʹม ͑ΒΕΔͨΊɼγεςϜͷ༷มߋʹରͯ͠ߴ͍֦ுੑΛ༗͍ͯ͠Δɽ •
͞Βʹ࣮ݧ͔ΒɼΫϥΠΞϯτɾαʔόؒʹsshrΛಋೖͨ͠߹ͷSSHηογϣ ϯཱ֬ͷΦʔόʔϔου20ϛϦඵఔͰ͋ΓɼϢʔβ͕ಛఆͷαʔόʹSSHϩ άΠϯ͢ΔࡍʹԆΛײ͡ͳ͍΄Ͳ͍࣌ؒͰ͋Δ͜ͱΛࣔͨ͠ɽ