SSHãšãŒãžã§ã³ã転éã䜿ã£ãŠããµãŒããŒãžã®ãããã€ãã·ã³ãã«ã«ããããšãã§ããŸãã ããããããšã§ãããŒïŒãã¹ãã¬ãŒãºãªãã®ïŒïŒããµãŒããŒäžã«æ®ããã«ãããŒã«ã«ã®SSHããŒã䜿çšã§ããŸãã
GitHub ãšããåãããããã« SSH ããŒãæ¢ã«èšå®ããŠããå Žåã¯ããããã ssh-agent
ã«ã€ããŠãåç¥ã§ãããã ããã¯ãããã¯ã°ã©ãŠã³ãã§å®è¡ãããããŒãã¡ã¢ãªã«ããŒãããç¶æ
ã«ãç¶ããã®ã§ãããŒã䜿ããã³ã«ãã¹ãã¬ãŒãºãå
¥åããå¿
èŠããªããªããŸãã 䟿å©ãªã®ã¯ããããããµãŒããŒäžã§æ¢ã«åäœããŠãããã®ããã«ããµãŒããŒããããŒã«ã«ã® ssh-agent
ã«ã¢ã¯ã»ã¹ãããããšãéžæã§ããããšã§ãã ããã¯ãå人ã®ã³ã³ãã¥ãŒã¿ãããªãã䜿ããããã«ãå人ã®ãã¹ã¯ãŒããå人ã«å
¥åããŠãããããã«é Œããããªãã®ã§ãã
SSH ãšãŒãžã§ã³ã転éã®è©³çްã«ã€ããŠã¯ãSteve Friedl ã® Tech ãã³ã ã¬ã€ããåç §ããŠãã ããã
SSHãšãŒãžã§ã³ã転éã®ã»ããã¢ãã
SSHããŒãã»ããã¢ãããããŠãããåäœããŠããããšã確èªããŠãã ããã ãŸã ã®å Žåã¯ãSSH ããŒã®çæã«é¢ããã¬ã€ãã䜿çšã§ããŸãã
ã¿ãŒããã«ã« ssh -T git@github.com
ãå
¥åããŠãããŒã«ã« ããŒãæ©èœããããšããã¹ãã§ããŸãã
$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.
ããã¹ã¿ãŒããåãããšãã§ããŸããã ãµãŒããŒãžã®ãšãŒãžã§ã³ã転éãã§ãããããSSHãã»ããã¢ããããŸãããã
-
ä»»æã®ããã¹ã ãšãã£ã¿ãŒã䜿çšããŠã
~/.ssh/config
ã§ãã¡ã€ã«ãéããŸãã ãã®ãã¡ã€ã«ãååšããªãå Žåã¯ãã¿ãŒããã«ã§touch ~/.ssh/config
ãšå ¥åããŠäœæã§ããŸãã -
ãã¡ã€ã«ã«æ¬¡ã®ããã¹ããå ¥åãã
example.com
ããµãŒããŒã®ãã¡ã€ã³åãŸã㯠IP ã«çœ®ãæããŸããHost example.com ForwardAgent yes
èŠå
ãã®èšå®ããã¹ãŠã® SSH æ¥ç¶ã«é©çšããã ãã®ããã«ãHost *
ã®ãããªã¯ã€ã«ãã«ãŒãã䜿ããããªãå ŽåããããŸãã ããã¯ããŒã«ã«ã® SSH ããŒã SSH æ¥ç¶ã§å
¥ã ãã¹ãŠã® ãµãŒããŒãšå
±æããããšã«ãªãã®ã§ãå®éã«ã¯è¯ãèãã§ã¯ãããŸããã ããŒã«çŽæ¥ã¢ã¯ã»ã¹ãããããšã¯ãªããããããŸããããæ¥ç¶ã確ç«ãããŠããé㯠ããªããšåãããã« ãããã®ããŒã䜿ããããããããŸããã 远å ãããµãŒããŒã¯ãä¿¡çšã§ãããšãŒãžã§ã³ã転éã§äœ¿ãããšããŠãããµãŒããŒã®ã¿ã«ããå¿
èŠããããŸãã
SSHãšãŒãžã§ã³ã転éã®ãã¹ã
ãã®ãšãŒãžã§ã³ã転éããµãŒããŒã§åäœããŠããããšããã¹ãããã«ã¯ããµãŒããŒã« SSH æ¥ç¶ããssh -T git@github.com
ãããäžåºŠå®è¡ããŸãã ãã¹ãŠããŸããã£ãŠãããªããããŒã«ã«ã§ãã£ãå Žåãšåãããã³ãããè¿ã£ãŠããã§ãããã
ããŒã«ã« ããŒã䜿çšãããŠãããã©ããããããªãå Žåã¯ããµãŒããŒäžã® SSH_AUTH_SOCK
倿°ã調ã¹ãããšãã§ããŸãã
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453
ãã®å€æ°ãèšå®ãããŠããªããªãããšãŒãžã§ã³ã転éã¯åäœããŠããªããšããããšã§ãã
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).
SSHãšãŒãžã§ã³ã転éã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
以äžã¯ãSSHãšãŒãžã§ã³ã転éã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®éã«æ³šæãã¹ãããšã§ãã
ã³ãŒããã®ãã§ãã¯ã¢ãŠãã«ã¯SSH URLã䜿ããªããã°ãªããªã
SSH転éã¯HTTP(s) URLã§ã¯åäœãããSSH URLã§ã®ã¿åäœããŸãã ãµãŒããŒäžã® .git/config
ãã¡ã€ã«ã確èªããURL ãæ¬¡ã®ãã㪠SSH ã¹ã¿ã€ã«ã® URL ã§ããããšã確èªããŸãã
[remote "origin"]
url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
fetch = +refs/heads/*:refs/remotes/origin/*
SSHããŒã¯ããŒã«ã«ã§åäœããŠããªããã°ãªããªã
ãšãŒãžã§ã³ã転éãéããŠããŒãåäœãããã«ã¯ããŸãããŒãããŒã«ã«ã§åäœããŠããªããã°ãªããŸããã SSH ããŒã®çæã«é¢ããã¬ã€ãã¯ãSSH ããŒãããŒã«ã«ã«èšå®ããã®ã«åœ¹ç«ã¡ãŸãã
ã·ã¹ãã ãSSHãšãŒãžã§ã³ã転éãèš±å¯ããŠããªããã°ãªããªã
ã·ã¹ãã èšå®ã§SSHãšãŒãžã§ã³ã転éãèš±å¯ãããŠããªãããšããããŸãã ã·ã¹ãã èšå®ãã¡ã€ã«ã䜿ãããŠãããã¯ãã¿ãŒããã«ã§ä»¥äžã®ã³ãã³ããå ¥åããŠã¿ãã°ãã§ãã¯ã§ããŸãã
$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt
äžèšã®äŸã§ã¯ãæåã«ãã¡ã€ã« ~/.ssh/config
ãèªã¿èŸŒãŸããæ¬¡ã« /etc/ssh_config
ãèªã¿åãããŸãã 以äžã®ã³ãã³ããå®è¡ããã°ããã®ãã¡ã€ã«ãèšå®ãäžæžãããŠãããã調ã¹ãããšãã§ããŸãã
$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
> SendEnv LANG LC_*
> ForwardAgent no
ãã®äŸã® /etc/ssh_config
ãã¡ã€ã«ã§ã¯ããšãŒãžã§ã³ãã®è»¢éããããã¯ããæ¹æ³ãšããŠãç¹ã« ForwardAgent no
ãèšè¿°ããŠããŸãã ãã®è¡ããã¡ã€ã«ããåé€ããã°ããšãŒãžã§ã³ã転éã¯æ¹ããŠåäœããããã«ãªããŸãã
ãµãŒããŒã¯ã€ã³ããŠã³ãæ¥ç¶ã§SSHãšãŒãžã§ã³ã転éãèš±å¯ããŠããªããã°ãªããªã
ãšãŒãžã§ã³ã転éã¯ããµãŒããŒã§ãããã¯ãããŠãããããããŸããã ãµãŒããŒãžã® SSH æ¥ç¶ããã³ sshd_config
ã®å®è¡ã«ããããšãŒãžã§ã³ã転éãèš±å¯ãããŠããããšã確èªã§ããŸãã ãã®ã³ãã³ãã®åºåã¯ãAllowAgentForwarding
ãèšå®ãããŠããããšã瀺ããŠããå¿
èŠããããŸãã
ããŒã«ã«ã® ssh-agent
ãå®è¡ãããŠããå¿
èŠããã
ã»ãšãã©ã®ã³ã³ãã¥ãŒã¿ãŒã§ã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ãã£ãŠèªåçã« ssh-agent
ãèµ·åãããŸãã ããããWindowsã§ã¯ãããæåã§è¡ããªããã°ãªããŸããã Git Bash ãéããã³ã« ssh-agent
ãéå§ããæ¹æ³ã«é¢ããã¬ã€ãããããŸãã
ã³ã³ãã¥ãŒã¿ãŒã§ ssh-agent
ãå®è¡ãããŠããããšã確èªããã«ã¯ãã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå
¥åããŸãã
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners
ssh-agent
ãããŒã䜿çšã§ããå¿
èŠããããŸãã
ããŒã ssh-agent
ããèŠããããšã確èªããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
ssh-add -L
ãã®ã³ãã³ããè奿 å ±ãå©çšã§ããªããšèšã£ãŠãããªããããŒã远å ããªããã°ãªããŸããã
ssh-add YOUR-KEY
ãã³ã
macOS ã§ã¯ãssh-agent
ããªããŒãäžã«åèµ·åããããšããã®ããŒã "å¿ããŸã"ã ãã ãã以äžã®ã³ãã³ãã§ããŒãã§ãŒã³ã«SSHããŒãã€ã³ããŒãã§ããŸãã
ssh-add --apple-use-keychain YOUR-KEY
ã¡ã¢
--apple-use-keychain
ãªãã·ã§ã³ã§ã¯ãssh-agent ã« SSH ããŒã远å ãããšããã¹ãã¬ãŒãºãããŒãã§ãŒã³ã«èªåçã«æ ŒçŽãããŸãã ãã¹ãã¬ãŒãºãããŒã«è¿œå ããªãå Žåã¯ã--apple-use-keychain
ãªãã·ã§ã³ãæå®ããã«ã³ãã³ããå®è¡ããŸãã
--apple-use-keychain
ãªãã·ã§ã³ã¯ãApple ã®æšæºããŒãžã§ã³ã® ssh-add
ã§ãã Monterey (12.0) ããåã® macOS ããŒãžã§ã³ã§ã¯ã--apple-use-keychain
ãš --apple-load-keychain
ãã©ã°ã§ããããæ§æ -K
ãš -A
ã䜿çšãããŠããŸããã
Apple ã®æšæºããŒãžã§ã³ã® ssh-add
ãã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ããšã©ãŒãçºçããããšããããŸãã 詳ããã¯ãããšã©ãŒ: ssh-add: éæ³ãªãã·ã§ã³ -- apple-use-keychainããã芧ãã ããã
ãã¹ãã¬ãŒãºã®å
¥åãæ±ãç¶ãããããšãã¯ãå Žåã«ãã£ãŠã¯ ~/.zshrc
ãã¡ã€ã« (ãŸã㯠bash çšã® ~/.bashrc
ãã¡ã€ã«) ã«ã³ãã³ãã远å ããŠãã ããã