SSHãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°ãOAuthããŒã¯ã³ã§ã®HTTPSããããã€ããŒããã·ã³ãŠãŒã¶ã䜿ã£ãŠãããã€ã¡ã³ãã¹ã¯ãªãããèªååããéã«ããµãŒããŒäžã®SSHããŒã管çã§ããŸãã
SSHãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°
å€ãã®å Žåãç¹ã«ãããžã§ã¯ãã®éå§æã«ã¯ãSSHãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°ãæãçŽ æ©ãã·ã³ãã«ã«äœ¿ããæ¹æ³ã§ãã ãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°ã§ã¯ãããŒã«ã«ã®éçºã³ã³ãã¥ãŒã¿ã§äœ¿ãã®ãšåãSSHããŒã䜿ããŸãã
SSH ãšãŒãžã§ã³ã転éã®é·æ
- æ°ããããŒãçæããã远跡ãããããªããŠããã
- ããŒã®ç®¡çã¯äžèŠããŠãŒã¶ã¯ããŒã«ã«ãšåãæš©éããµãŒããŒã§ãæã€ã
- ãµãŒããŒã«ããŒã¯ä¿åãããªãã®ã§ããµãŒããŒã䟵害ãåããå Žåã§ãã䟵害ãããããŒã远跡ããŠåé€ããå¿ èŠã¯ãªãã
SSH ãšãŒãžã§ã³ã転éã®çæ
- ãŠãŒã¶ãŒã¯ããããã€ã« SSH æ¥ç¶ããå¿ èŠããããŸããèªåããã〠ããã»ã¹ã¯äœ¿çšã§ããŸããã
- SSHãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°ã¯ãWindowsã®ãŠãŒã¶ãå®è¡ããã®ãé¢åã
SSH ãšãŒãžã§ã³ã転éãèšå®ãã
- ãšãŒãžã§ã³ãã®ãã©ã¯ãŒãã£ã³ã°ãããŒã«ã«ã§ãªã³ã«ããŠãã ããã 詳现ã«ã€ããŠã¯ãSSH ãšãŒãžã§ã³ãã®è»¢éã«é¢ããã¬ã€ããåç §ããŠãã ããã
- ãšãŒãžã§ã³ããã©ã¯ãŒãã£ã³ã°ã䜿çšããããã«ããããã€ã¹ã¯ãªãããèšå®ããŠãã ããã ããšãã°ãbash ã¹ã¯ãªããã§ã¯ããšãŒãžã§ã³ãã®è»¢éãæå¹ã«ãããšã次ã®ããã«ãªããŸã:
ssh -A serverA 'bash -s' < deploy.sh
OAuthããŒã¯ã³ã䜿ã£ãHTTPSã§ã®ã¯ããŒãã³ã°
SSH ããŒã䜿çšããªãå Žåã¯ãOAuth ããŒã¯ã³ã§ HTTPS ã䜿çšã§ããŸãã
OAuth ããŒã¯ã³ã䜿ã£ã HTTPS ã§ã®ã¯ããŒãã³ã°ã®é·æ
- ãµãŒããŒã«ã¢ã¯ã»ã¹ã§ãã人ãªãããªããžããªããããã€ã§ããã
- ãŠãŒã¶ã¯ããŒã«ã«ã®SSHèšå®ã倿Žããå¿ èŠããªãã
- è€æ°ã®ããŒã¯ã³ïŒãŠãŒã¶ããšïŒãå¿ èŠãªãããµãŒããŒããšã«1ã€ã®ããŒã¯ã³ã§ååã
- ããŒã¯ã³ã¯ãã€ã§ãåãæ¶ãã§ããã®ã§ãæ¬è³ªçã«ã¯äœ¿ãæšãŠã®ãã¹ã¯ãŒãã«ããããšãã§ããã
OAuth ããŒã¯ã³ã䜿ã£ã HTTPS ã§ã®ã¯ããŒãã³ã°ã®çæ
- ããŒã¯ã³ã確å®ã«æ£ããã¢ã¯ã»ã¹ã¹ã³ãŒãã§èšå®ããªããã°ãªããªãã
- ããŒã¯ã³ã¯æ¬è³ªçã«ã¯ãã¹ã¯ãŒãã§ããããã¹ã¯ãŒããšåãããã«ä¿è·ããªããã°ãªããªãã
OAuth ããŒã¯ã³ã䜿ã£ã HTTPS ã§ã®ã¯ããŒãã³ã°ãèšå®ãã
personal access token ã®äœæã«é¢ããã¬ã€ããåç §ããŠãã ããã
ããã〠ããŒ
ããã〠ããŒã䜿çšãããšãGitHub.com ã®ãªããžããªãããµãŒããŒã«ãããžã§ã¯ããèµ·åã§ããŸããããã〠ããŒã¯ãåäžã®ãªããžããªãžã®ã¢ã¯ã»ã¹æš©ãä»äžãã SSH ããŒã§ãã GitHub ã¯å人ã¢ã«ãŠã³ãã®ä»£ããã«ããªããžããªã«çŽæ¥ããŒã®ãããªãã¯ãªéšåãã¢ã¿ããããããŒã®ãã©ã€ããŒããªéšåã¯ãµãŒããŒã«æ®ããŸãã 詳ããã¯ãããããã€ã¡ã³ããé ä¿¡ããããã芧ãã ããã
æžã蟌ã¿ã¢ã¯ã»ã¹æš©ãæã€ããŒããããã€ããã°ã管çã¢ã¯ã»ã¹æš©ãæã€Organizationã®ã¡ã³ããŒããããã¯å人ãªããžããªã®ã³ã©ãã¬ãŒã¿ãšåãã¢ã¯ã·ã§ã³ãè¡ããŸãã 詳现ã«ã€ããŠã¯ããOrganizationã®ãªããžããªããŒã«ãããã³ãå人ã¢ã«ãŠã³ãã®ãªããžããªã®æš©éã¬ãã«ããåç §ããŠãã ããã
ã»ãã¥ãªãã£ã匷åãããªããžããªã®ã¢ã¯ã»ã¹ãšã¢ã¯ã»ã¹èš±å¯ããã现ããå¶åŸ¡ããããã«ã代ããã« GitHub ã¢ããªã䜿çšããããšããå§ãããŸãã ãGitHub App ãäœæããã¿ã€ãã³ã°ã倿ããããåç §ããŠãã ããã
ããã〠ããŒã®é·æ
- ãªããžããªãšãµãŒããŒã«ã¢ã¯ã»ã¹ã§ãã人ã¯ã誰ã§ããããžã§ã¯ãããããã€ã§ããã
- ãŠãŒã¶ã¯ããŒã«ã«ã®SSHèšå®ã倿Žããå¿ èŠããªãã
- ããã〠ããŒã¯æ¢å®ã§ã¯èªã¿åãå°çšã§ããããªããžããªã«è¿œå ãããšãã«æžã蟌ã¿ã¢ã¯ã»ã¹æš©ãä»äžããããšãã§ããŸãã
ããã〠ããŒã®çæ
- ãããã€ããŒã¯åäžã®ãªããžããªã«å¯Ÿããã¢ã¯ã»ã¹ã ããèš±å¯ã§ããã ããè€éãªãããžã§ã¯ãã¯ãåããµãŒããŒãããã«ããå€ãã®ãªããžããªãæã£ãŠããããšãããã
- ãããã€ããŒã¯éåžžãã¹ãã¬ãŒãºã§ä¿è·ãããŠããªãã®ã§ããµãŒããŒã䟵害ããããšç°¡åã«ããŒã«ã¢ã¯ã»ã¹ãããããšã«ãªãã
- ããã〠ããŒã¯ãæå¹æéã®ãªãè³æ Œæ å ±ã§ãã
- ããã〠ããŒã¯ãOrganization ã®ã¡ã³ããŒã·ããã«çŽæ¥ãªã³ã¯ãããŸããã ããã〠ããŒã¯ãç¹å®ã®ãŠãŒã¶ãŒã§ã¯ãªããªããžããªã«é¢é£ä»ããããŠãããããããã〠ããŒãäœæãããŠãŒã¶ãŒããªããžããªããåé€ãããŠããåŒãç¶ãã¢ã¯ãã£ãã§ãã
ããã〠ããŒãèšå®ãã
ã¡ã¢
Organization ã Enterprise ã«ãã£ãŠææãããŠããŠãEnterprise ææè ããªããžããªå ã®ããã〠ããŒã®äœ¿çšãå¶éããŠããå ŽåãOrganization å ã®ããªã·ãŒããªãŒããŒã©ã€ãããŠããã〠ããŒãäœæããããšã¯ã§ããŸããã 詳ããã¯ããEnterprise ã§ãªããžããªç®¡çããªã·ãŒãé©çšããããã芧ãã ããã
-
ãµãŒããŒã§
ssh-keygen
æé ãå®è¡ããçæãããå ¬éããŒãšç§å¯ RSA ããŒã®ãã¢ãä¿åããå ŽæãèŠããŠãããŠãã ããã -
GitHub ã§ããªããžããªã®ã¡ã€ã³ ããŒãžã«ç§»åããŸãã
-
ãªããžããªåã®äžã«ãã [èšå®] ãã¯ãªãã¯ããŸãã [èšå®] ã¿ãã衚瀺ãããªãå Žåã¯ã [] ããããããŠã³ ã¡ãã¥ãŒãéžã³ã [èšå®] ãã¯ãªãã¯ããŸãã
-
ãµã€ãããŒã«ãã [Deploy Keys] (ããŒã®ãããã€) ãã¯ãªãã¯ããŸãã
-
[Add deploy key] (ããã〠ããŒã®è¿œå ) ãã¯ãªãã¯ããŸãã
-
[ã¿ã€ãã«] ãã£ãŒã«ãã«ã¿ã€ãã«ãå ¥åããŸãã
-
[ããŒ] ãã£ãŒã«ãã«å ¬éããŒã貌ãä»ããŸãã
-
ãã®ããŒã«ãªããžããªãžã®æžã蟌ã¿ã¢ã¯ã»ã¹æš©ãä»äžããå Žåã¯ã [æžã蟌ã¿ã¢ã¯ã»ã¹ãèš±å¯ãã] ãéžæããŸãã æžã蟌ã¿ã¢ã¯ã»ã¹æš©ãæã€ãããã€ããŒã䜿ããšããªããžããªã«ãããã€ã¡ã³ãã®ããã·ã¥ãã§ããããã«ãªããŸãã
-
[ããŒã®è¿œå ] ãã¯ãªãã¯ããŸãã
REST API ã䜿çšããŠãããã〠ããŒãäœæããããšãã§ããŸãã 詳ããã¯ããããã〠ããŒçšã® REST API ãšã³ããã€ã³ãããã芧ãã ããã
1ã€ã®ãµãŒããŒäžã§è€æ°ã®ãªããžããªãå©çšãã
1ã€ã®ãµãŒããŒäžã§è€æ°ã®ãªããžããªã䜿ããªããããããã®ãªããžããªã«å¯ŸããŠå°çšã®ããŒãã¢ãçæããªããã°ãªããŸããã è€æ°ã®ãªããžããªã§ãããã€ããŒãåå©çšããããšã¯ã§ããŸããã
ãµãŒããŒã® SSH æ§æãã¡ã€ã« (éåžž ~/.ssh/config
) ã«ãåãªããžããªã®ãšã€ãªã¢ã¹ ãšã³ããªã远å ããŸãã æ¬¡ã«äŸã瀺ããŸãã
Host github.com-repo-0
Hostname github.com
IdentityFile=/home/user/.ssh/repo-0_deploy_key
Host github.com-repo-1
Hostname github.com
IdentityFile=/home/user/.ssh/repo-1_deploy_key
Host github.com-repo-0
- ãªããžããªã®ãšã€ãªã¢ã¹ãHostname github.com
- ãšã€ãªã¢ã¹ã§äœ¿çšãããã¹ãåãæ§æããŸããIdentityFile=/home/user/.ssh/repo-0_deploy_key
- ç§å¯ããŒããšã€ãªã¢ã¹ã«å²ãåœãŠãŸãã
ããããã°ããã¹ãåã®ãšã€ãªã¢ã¹ã䜿ã£ãŠSSHã§ãªããžããªãšãããšãã§ããŸãããã®å Žåããã®ãšã€ãªã¢ã¹ã«å²ãåœãŠããããŠããŒã¯ãªãããã€ããŒã䜿ãããŸãã æ¬¡ã«äŸã瀺ããŸãã
git clone git@github.com-repo-1:OWNER/repo-1.git
GitHub App ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³
ãµãŒããŒã 1 ã€ãŸãã¯è€æ°ã®çµç¹ã«ããããªããžããªã«ã¢ã¯ã»ã¹ããå¿ èŠãããå ŽåãGitHub App ã䜿çšããŠå¿ èŠãªã¢ã¯ã»ã¹ãå®çŸ©ãããã® GitHub App ãã_å³å¯ã«ã¹ã³ãŒããèšå®ããã_ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ãçæã§ããŸãã ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã¯åäžãŸãã¯è€æ°ã®ãªããžããªãã¹ã³ãŒããšããããšãã§ããã¢ã¯ã»ã¹èš±å¯ã现ããèšå®ã§ããŸãã ããšãã°ããªããžããªã®ã³ã³ãã³ããžã®èªã¿åãå°çšã¢ã¯ã»ã¹æš©ãæã€ããŒã¯ã³ãçæã§ããŸãã
GitHub Apps 㯠GitHub ã§äž»åœ¹çŽã®ååšãªã®ã§ãã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã¯ãããã GitHub ãŠãŒã¶ãŒããåãé¢ãããŠããŠã"ãµãŒãã¹ ããŒã¯ã³" ã«çžåœããŸãã ããã«ãã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã«ã¯ãå®è¡ãããçµç¹ã®èŠæš¡ã«å¿ããŠã¹ã±ãŒãªã³ã°ãããå°çšã®ã¬ãŒãå¶éããããŸãã 詳现ã«ã€ããŠã¯ããGitHub Apps ã®ã¬ãŒãå¶éããåç §ããŠãã ããã
ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã®é·æ
- æš©éèšå®ãšæå¹æé (1æéããŸãã¯APIã§æåã§åãæ¶ãããå Žåã«ã¯ãã以äž) ãæç¢ºã«å®çŸ©ããããã¹ã³ãŒãã峿 ŒãªããŒã¯ã³ã
- çµç¹ã®èŠæš¡ã«åŸã£ãŠæ¡å€§ãããç¬èªã®ã¬ãŒãå¶éã
- GitHub ãŠãŒã¶ãŒ ID ããåãé¢ãããŠãããããã©ã€ã»ã³ã¹ã¯äœ¿ãããŸãã
- ãã¹ã¯ãŒããä»äžãããªãã®ã§ãçŽæ¥ãµã€ã³ã€ã³ãããªãã
ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã®çæ
- GitHub App ãäœæããã«ã¯ã远å ã®ã»ããã¢ãããå¿ èŠã§ãã
- ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã¯ 1 æéåŸã«æéåãã«ãªãã®ã§ãåçæããå¿ èŠããã (éåžžã¯ã³ãŒãã䜿çšããŠããªã³ããã³ãã§è¡ã)ã
ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ãèšå®ãã
- GitHub App ããããªãã¯ãšãã©ã€ããŒãã®ã©ã¡ãã«ããããæ±ºå®ããŸãã GitHub App ãçµç¹å ã®ãªããžããªã®ã¿ã§åäœããå Žåã¯ããã©ã€ããŒãã«èšå®ããæ¹ãããã§ãããã
- ãªããžããªã®å 容ã®èªã¿åãå°çšã¢ã¯ã»ã¹ãªã©ãGitHub App ãå¿ èŠãšããã¢ã¯ã»ã¹èš±å¯ã決å®ããŸãã
- çµç¹ã®èšå®ããŒãžãã GitHub App ãäœæããŸãã 詳现ã«ã€ããŠã¯ããGitHub App ãäœæããããåç §ããŠãã ããã
- GitHub App
id
ãã¡ã¢ããŸãã - GitHub App ã®ç§å¯ããŒãçæããŠããŠã³ããŒãããå®å šãªæ¹æ³ã§ä¿åããŸãã 詳现ã«ã€ããŠã¯ããç§å¯ããŒãçæããããåç §ããŠãã ããã
- åäœãããããªããžããªã« GitHub App ãã€ã³ã¹ããŒã«ããŸããå¿ èŠã«å¿ããŠãçµç¹ã®å šãªããžããªã« GitHub App ãã€ã³ã¹ããŒã«ããŠãæ§ããŸããã
- GitHub App ãšããããã¢ã¯ã»ã¹ã§ããçµç¹ãªããžããªã®éã®æ¥ç¶ã衚ã
installation_id
ãç¹å®ããŸãã GitHub App ãšçµç¹ã®ãã¢ã®ããããã«ã¯ãæå€§ã§ 1 ã€ã®installation_id
ããããŸãã ãèªèšŒãããã¢ããªã®çµç¹ã®ã€ã³ã¹ããŒã«ãååŸãããã䜿çšããŠãã®installation_id
ãèå¥ã§ããŸãã ããã«ã¯ãJWT ã䜿çšãã GitHub App ãšããŠã®èªèšŒãå¿ èŠã§ãã詳现ã«ã€ããŠã¯ããGitHub App ãšããŠã®èªèšŒããåç §ããŠãã ããã - 察å¿ãã REST API ãšã³ããã€ã³ãã䜿çšããŠãã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ãçæããŸãããã¢ããªã®ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ãäœæããããåç §ããŠãã ããã ããã«ã¯ãJWT ã䜿çšãã GitHub App ãšããŠã®èªèšŒãå¿ èŠã§ãã詳现ã«ã€ããŠã¯ããGitHub App ãšããŠã®èªèšŒããšãã€ã³ã¹ããŒã«ãšããŠã®èªèšŒããåç §ããŠãã ããã
- ãã®ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã䜿çšããŠãREST ãŸã㯠GraphQL APIãããã㯠Git ã¯ã©ã€ã¢ã³ãçµç±ã§ãªããžããªãšããåãããŸãã
詳ããã¯ããGitHub ã¢ããªã®ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã®çæããã芧ãã ããã
ãã·ã³ãŠãŒã¶
ãµãŒããŒãè€æ°ã®ãªããžããªã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåã¯ãGitHub.com äžã§æ°ããã¢ã«ãŠã³ããäœæããèªååå°çšã«äœ¿çšããã SSH ããŒãã¢ã¿ããããããšãã§ããŸãã GitHub.com ã®ãã®ã¢ã«ãŠã³ãã¯äººéã«ã¯äœ¿çšãããªãããã_ãã·ã³ ãŠãŒã¶ãŒ_ãšåŒã°ããŸãã ãã·ã³ ãŠãŒã¶ãŒãå人ãªããžããªã® ã³ã©ãã¬ãŒã¿ãŒ (èªã¿åããšæžã蟌ã¿ã¢ã¯ã»ã¹æš©ã®ä»äž)ãçµç¹ãªããžããªã® å€éšã³ã©ãã¬ãŒã¿ãŒ (èªã¿åããæžã蟌ã¿ããŸãã¯ç®¡çè ã¢ã¯ã»ã¹æš©ã®ä»äž)ããŸãã¯èªååããå¿ èŠããããªããžããªãžã®ã¢ã¯ã»ã¹æš©ãæã€ ããŒã (ããŒã ã®ã¢ã¯ã»ã¹èš±å¯ã®ä»äž) ãšããŠè¿œå ã§ããŸãã
ãã³ã
ãµãŒãã¹äœ¿çšæ¡ä»¶ã®ç¶æ :
"ããã" ãŸãã¯ãã®ä»ã®èªååãããææ®µã§ "ã¢ã«ãŠã³ã" ãç»é²ããããšã¯èš±å¯ãããŠããŸããã
ããã¯ãã¢ã«ãŠã³ãã®çæãèªååããããšã¯ã§ããªããšããããšã§ãã ãããããããžã§ã¯ããçµç¹å ã§ãããã€ã¹ã¯ãªããã®ãããªèªååã¿ã¹ã¯ã®ããã«1ã€ã®ãã·ã³ãŠãŒã¶ãäœæããããªããããã¯ãŸã£ããçŽ æŽãããããšã§ãã
ãã·ã³ ãŠãŒã¶ãŒã®é·æ
- ãªããžããªãšãµãŒããŒã«ã¢ã¯ã»ã¹ã§ãã人ã¯ã誰ã§ããããžã§ã¯ãããããã€ã§ããã
- ïŒäººéã®ïŒãŠãŒã¶ãããŒã«ã«ã®SSHèšå®ã倿Žããå¿ èŠããªãã
- è€æ°ã®ããŒã¯å¿ èŠãªãããµãŒããŒããšã«1ã€ã§ããã
ãã·ã³ ãŠãŒã¶ãŒã®çæ
- çµç¹ã ãããã·ã³ãŠãŒã¶ããªãŒããªã³ãªãŒã®ã¢ã¯ã»ã¹ã«ã§ããã å人ãªããžããªã¯ãåžžã«ã³ã©ãã¬ãŒã¿ã®èªã¿æžãã¢ã¯ã»ã¹ãèš±å¯ããã
- ãã·ã³ãŠãŒã¶ã®ããŒã¯ããããã€ããŒã®ããã«ãéåžžãã¹ãã¬ãŒãºã§ä¿è·ãããªãã
ãã·ã³ ãŠãŒã¶ãŒãèšå®ãã
- ãµãŒããŒã§
ssh-keygen
æé ãå®è¡ããå ¬éããŒããã·ã³ ãŠãŒã¶ãŒ ã¢ã«ãŠã³ãã«ã¢ã¿ããããŸãã - ãã·ã³ãŠãŒã¶ã¢ã«ãŠã³ãã«èªååããããªããžããªãžã®ã¢ã¯ã»ã¹ãä»äžããŠãã ããã ãããè¡ãã«ã¯ãã¢ã«ãŠã³ãã ã³ã©ãã¬ãŒã¿ãŒ ãšããŠãå€éšã³ã©ãã¬ãŒã¿ãŒ ãšããŠããŸãã¯çµç¹å ã® ããŒã ã«è¿œå ããŸãã