[DevTools] 1Password์์ SSH ํค ๊ด๋ฆฌํ๊ธฐ
1Password 8 ๋ฒ์ ๋ถํฐ SSH & Git ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ํ์ฌ Ed25519์ RSA ๋๊ฐ์ง ํ์
์ ์ง์ํ๋ฉฐ, ๊ธฐ์กด SSH ํค๋ฅผ ๋ถ๋ฌ์์ ์ ์ฅํ ์๋ ์๋ค. ์ฐธ๊ณ ๋ก *.pem
ํ์ผ์ 1Password์ ๋ถ๋ฌ์์ ์ ์ฅํ ํ, ๊ฐ์ธํค๋ฅผ ๋ค์ ๋ค์ด๋ก๋ํด์ ์ฌ์ฉํ ๋ pem
ํ์ฅ์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
1Password์ SSH & Git ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด SSH ๊ฐ์ธํค๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ์ง ์๊ณ ๋ SSH ์ธ์ฆ์ ์งํํ ์ ์๋ค. ~/.ssh/config
ํ์ผ์ ์ผ์ผ์ด SSH ํค ๊ฒฝ๋ก๋ฅผ ๋ช
์ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์๋ ๋ ์ ์๋ค.
1Password์์ ์์ฑํ SSH ํค๋ ๊ณต๊ฐํค์ ํ๊ฑฐ ํ๋ฆฐํธ(Finger Print)๋ฅผ ํจ๊ป ์์ฑํ๊ธฐ ๋๋ฌธ์ GitHub ๊ฐ์ ์๋น์ค์์ ๊ณต๊ฐํค ์๋์์ฑ ๊ธฐ๋ฅ๋ ์ฌ์ฉํ ์ ์๋ค. ๋ณ๊ฑฐ ์๋ ๊ฒ ๊ฐ์ง๋ง ์๊ทผํ ์ ์ฉํ๋ค.
์ค์ ๋ฐฉ๋ฒ
โถ 1Password SSH ์์ด์ ํธ ํ์ฑํ
- ์ค์ → ๊ฐ๋ฐ์ → SSH ์์ด์ ํธ ์ฌ์ฉ :
์ฒดํฌ
- ์ค์ → ๊ฐ๋ฐ์ → ์ฐ๊ฒฐ์ ์น์ธํ ๋ ํค ์ด๋ฆ ํ์ :
์ฒดํฌ
โท ~/.password/agent.sock
๊ฒฝ๋ก์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ถ๊ฐ
mkdir -p ~/.1password && ln -s ~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock ~/.1password/agent.sock
mkdir -p
์ต์ : ์ฌ๊ท์ ์ผ๋ก ํด๋ ์์ฑ(์ค๊ฐ ๊ฒฝ๋ก์ ๋ํ ํด๋๊ฐ ์๋ค๋ฉด ์๋์ผ๋ก ์์ฑ๋จ)ln
: ๋งํฌ ์์ฑ ex)ln ์์คํ์ผ ํ๊ฒ๊ฒฝ๋ก
ln -s
์ต์ : ์ฌ๋ณผ๋ฆญ ๋งํฌ(symlink) ์์ฑ
โธ ~/.ssh/config
ํ์ผ์ 1Password SSH ์์ด์ ํธ ๊ฒฝ๋ก ์ถ๊ฐ. Host *
๋ถ๋ถ์ ์ถ๊ฐํ์ผ๋ฏ๋ก ๋ชจ๋ ํธ์คํธ์ ๋ํด 1Password ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ๋ค. 1Password์์ ๊ด๋ฆฌํ๋ SSH ํค๋ IdentityFile
ํญ๋ชฉ์ ์ผ์ผ์ด ๊ฒฝ๋ก๋ฅผ ๋ช
์ํ์ง ์์๋ ๋๋ค.
# ~/.ssh/config
Host *
IdentityAgent ~/.password/agent.sock
ํน์ ํธ์คํธ์๋ง 1Password ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํ ์ ์๋ค. github-home
ํธ์คํธ๋ 1Password ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ๊ณ ec2-server
ํธ์คํธ๋ ๋ก์ปฌ์ ์ ์ฅ๋ SSH ํค(pem ํ์ผ)๋ฅผ ์ฌ์ฉํ๋ ์์ โผ
# A host that's using the 1Password agent
Host github-home
HostName github.com
User pi
IdentityAgent ~/.1password/agent.sock
# A host that's using a local private key file that's not saved in 1Password
Host ec2-server
HostName 54.123.45.67
User ec2-user
IdentityFile ~/.ssh/ssh-key-not-on-1password.pem
์ฌ์ฉ
ํฐ๋ฏธ๋์ด๋ SSH ํด๋ผ์ด์ธํธ์์ git pull ...
๊ฐ์ SSH ํค๋ฅผ ์ฌ์ฉํ๋ ์์
์ ์ํํ๋ฉด SSH ํค ์ฌ์ฉ ์น์ธ ํ์
์ด ๋ฌ๋ค. ์์ฒญ์ ์น์ธํ๋ฉด 1Password๊ฐ ์ ๊ธธ๋๊น์ง ๋์ผํ SSH ํค๋ ๋ณ๋ ์น์ธ์์ด ๊ณ์ ์ฌ์ฉํ ์ ์๋ค(Touch ID / Windows Hello ๊ฐ์ ์์ฒด ์ธ์์ผ๋ก ์น์ธ ๊ฐ๋ฅ).
1Password์ SSH ํค๋ฅผ ์ ์ฅํด๋๋ฉด ์น์ฌ์ดํธ์ ๊ณต๊ฐํค๋ฅผ ๋ฑ๋กํ ๋ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ์ผ์ผ์ด ๊ณต๊ฐํค๋ฅผ ๋ณต์ฌ / ๋ถ์ฌ๋ฃ๊ธฐ ํ์ง ์์๋ ๋๋ค. ๊ณต๊ฐํค ์๋ ์์ฑ ๊ธฐ๋ฅ์ GitHub, GitLab ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ค.
๐ก 1Password์์ SSH ํค๋ฅผ ์์ฑ(์ ์ฅ)ํ๋ฉด ๊ณต๊ฐํค์ ํ๊ฑฐ ํ๋ฆฐํธ(Finger Print)๊ฐ ํจ๊ป ์์ฑ๋๋ฉฐ, ~/.ssh/config
ํ์ผ์ SSH ํค ๊ฒฝ๋ก๋ฅผ ๋ช
์ํ์ง ์์๋ ๋๋ค.
๐ ์๋ ์์ฑ ์ง์ ์ฌ์ดํธ ๋ชฉ๋ก - ๊ณต์ ๋ฌธ์
- Bitbucket
- DigitalOcean
- GitHub
- GitLab
- Google Compute Engine
- Linode
- Microsoft Azure
- Ngrok
- Vultr
SSH ํด๋ผ์ด์ธํธ ํธํ์ฑ
macOS, Linux์ SSH / Git ํด๋ผ์ด์ธํธ๋ ~/.ssh/config
ํ์ผ์ IdentityAgent
์ค์ ์ ํ์ธํ ํ ์์ด์ ํธ ์์ผ ๊ฒฝ๋ก(agent socket path)๋ฅผ ์ฌ์ฉํด์ SSH ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ค. ํ์ง๋ง ๋ชจ๋ SSH ํด๋ผ์ด์ธํธ๊ฐ IdentityAgent
๊ตฌ์ฑ์ ์ง์ํ์ง ์๋๋ค.
๐ก SSH Client ํธํ์ฑ ๋ชฉ๋ก ์ผ๋ถ ๋ด์ฉ ๋ฐ์ท. ๋ ์์ธํ ๋ชฉ๋ก์ ๊ณต์ ๋ฌธ์ ์ฐธ๊ณ
Name | SSH Capability | Compatible with 1Password |
Fork | Git | โ |
Sourcetree | Git | โ |
GitHub Desktop | Git | โ |
git CLI | Git | โ |
OpenSSH | SSH, SFTP | โ |
JetBrains IDEs | Git | โ |
Visual Studio Code | Git | โ |
Xcode | Git | โ |
macOS์ Linux์์ SSH_AUTH_SOCK
ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์์ด์ ํธ ์์ผ ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก IdentityAgent
๋ณด๋ค SSH_AUTH_SOCK
์ ์ง์ํ๋ SSH ํด๋ผ์ด์ธํธ๊ฐ ๋ ๋ง๋ค. ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ IdentityAgent
๋ฅผ ์ง์ํ์ง ์๋๋ค๋ฉด SSH_AUTH_SOCK
์ค์ ์ ํตํด ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. โผ
# SSH_AUTH_SOCK ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ์ปค๋งจ๋(ํ์ฌ ํฐ๋ฏธ๋์์๋ง ์ ํจ)
export SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock
๋ชจ๋ ํด๋ผ์ด์ธํธ์ SSH_AUTH_SOCK
ํ๊ฒฝ ๋ณ์๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํ๊ณ ์ถ๋ค๋ฉด ์๋ ์ปค๋งจ๋๋ฅผ ์
๋ ฅํ๋ค.
# SSH_AUTH_SOCK์ ์ ์ญ์ผ๋ก ๊ตฌ์ฑํ๋ ์ปค๋งจ๋
cat << EOF > ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.1password.SSH_AUTH_SOCK</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>/bin/ln -sf $HOME/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock \$SSH_AUTH_SOCK</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
launchctl load -w ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
โถ 1Password 8 SSH ์์ด์ ํธ ์ธ๋ก๋
launchctl unload ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
โท plist
์ญ์ (์์ด์ ํธ๋ฅผ ์ธ๋ก๋ํด๋ ์ฌ๋ถํ
ํ๋ฉด ๋ค์ ๋ก๋๋๋ฏ๋ก plist๋ฅผ ์ญ์ ํด์ผ๋จ)
rm ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
โธ ์ฌ๋ถํ
๋ฒ์ธ — HERODOC
EOF
๋ End Of File์ ์ฝ์๋ก ํ์ผ์ ๋์ ์๋ฆด ๋ ์ฌ์ฉํ๋ค. cat << EOF
๋ HERODOC ๊ตฌ๋ฌธ ํ์์ผ๋ก ์ฌ๋ฌ ์ค์ ํ
์คํธ๋ฅผ ์
๋ ฅํ ๋(EOF
์๋ณ์ ์ด์ ๊น์ง) ์ฌ์ฉํ๋ค.
cat << EOF > [ํ์ผ๋ช
]
ํ์์ผ๋ก ์
๋ ฅํ๋ฉด ์์ฑํ ๋ฉํฐ๋ผ์ธ ํ
์คํธ๋ฅผ ๋ช
์ํ ํ์ผ์ ์ ์ฅํ๋ค. EOF
์ธ์ STOP
๊ฐ์ ๋ค๋ฅธ ์๋ณ์๋ฅผ ์ฌ์ฉํด๋ ๋๋ฉฐ, ์ฒ์์ ์ฌ์ฉํ ์๋ณ์์ ๋ ์๋ณ์๊ฐ ์ผ์นํด์ผ ๋๋ค.
cat << EOF > helloworld.txt
> Hello
> World
> EOF
cat helloworld.txt
# Hello
# World
๋ ํฌ์งํ ๋ฆฌ๋ง๋ค ๋ค๋ฅธ SSH ํค ์ฌ์ฉํ๊ธฐ
1Password์ ์ ์ฅํ SSH ํค๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๋ ํฌ์งํ ๋ฆฌ๋ง๋ค ๊ฐ๊ฐ ๋ค๋ฅธ SSH key๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์๋ค.
โถ 1Password์ ์ ์ฅํด๋ SSH ๊ณต๊ฐํค(๊ฐ์ธ ๋ฐ ํ์ฌ์ฉ) ๋ค์ด๋ก๋
~/.ssh
๊ฒฝ๋ก์ ์ ์ฅ. ๊ตฌ๋ถํ๊ธฐ ์ฝ๊ฒ personal-github.pub
๋ฑ ์ด๋ฆ์ผ๋ก ์ง์ โธ ~/.ssh/config
ํ์ผ ์์
# Personal GitHub (๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํด์ Host ์ด๋ฆ 2๊ฐ ์
๋ ฅํจ)
Host github.com personal-github
HostName github.com
User git
IdentityFile ~/.ssh/personal-github.pub
IdentitiesOnly yes
# Work GitHub
Host work-github
HostName github.com
User git
IdentityFile ~/.ssh/work-github.pub
IdentitiesOnly yes
Host
์ด๋ฆ์ ์์ ์ง์ ํ ์ ์๊ณ , ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํด์ ์ฌ๋ฌ๊ฐ ์ ๋ ฅ ๊ฐ๋ฅ ex)gh1
,gh2
IdentitiesOnly
์ต์ ์yes
๋ก ์ค์ ํ๋ฉด ์ธ์ฆ์IdentityFile
์ ๋ช ์ํ ํค ํ์ผ๋ง ์ฌ์ฉUser
(์ ์ ์ด๋ฆ)์git
์ ๋ช ์ํ์ผ๋ฏ๋ก host ์ฃผ์ ์์git@
์ ๋ถ์ธ ๊ฒ๊ณผ ๋์ผ
ex)ssh -T github.com
ssh -T git@github.com
๋๋ค ๋์ผ
โน ๋ ํฌ์งํ ๋ฆฌ remote ์ฃผ์์ host๋ฅผ github.com
๋์ .ssh/config
ํ์ผ์ ์ง์ ํ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ
git remote set-url origin host:workplace/repo.git
# github.com(๊ธฐ๋ณธ๊ฐ) ํธ์คํธ ๋ณ๊ฒฝ ์์
# personal-github ํธ์คํธ (๊ฐ์ธ ๋ ํฌ์งํ ๋ฆฌ)
git remote set-url origin personal-github:romantech/practice.git
# work-github ํธ์คํธ (ํ์ฌ ๋ ํฌ์งํ ๋ฆฌ)
git remote set-url origin work-github:google/gmail.git
๋ ํผ๋ฐ์ค
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTML/CSS] backdrop-filter vs filter ์์ฑ ๋น๊ต (0) | 2024.05.08 |
---|---|
[HTML/CSS] Tailwind CSS ๋ค์ด๋๋ฏน ํด๋์ค ์ฌ์ฉ์ ์ฃผ์ํ ์ (0) | 2024.05.08 |
[Algorithm] ํต ์ ๋ ฌ(Quick Sort) ์๊ณ ๋ฆฌ์ฆ ํบ์๋ณด๊ธฐ (0) | 2024.05.07 |
[Algorithm] ๋ถํ ์ ๋ณต / ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (0) | 2024.05.07 |
[Algorithm] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ (๋ฒ๋ธ/์ ํ/์ฝ์ ) (0) | 2024.05.06 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[HTML/CSS] backdrop-filter vs filter ์์ฑ ๋น๊ต
[HTML/CSS] backdrop-filter vs filter ์์ฑ ๋น๊ต
2024.05.08 -
[HTML/CSS] Tailwind CSS ๋ค์ด๋๋ฏน ํด๋์ค ์ฌ์ฉ์ ์ฃผ์ํ ์
[HTML/CSS] Tailwind CSS ๋ค์ด๋๋ฏน ํด๋์ค ์ฌ์ฉ์ ์ฃผ์ํ ์
2024.05.08 -
[Algorithm] ํต ์ ๋ ฌ(Quick Sort) ์๊ณ ๋ฆฌ์ฆ ํบ์๋ณด๊ธฐ
[Algorithm] ํต ์ ๋ ฌ(Quick Sort) ์๊ณ ๋ฆฌ์ฆ ํบ์๋ณด๊ธฐ
2024.05.07 -
[Algorithm] ๋ถํ ์ ๋ณต / ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
[Algorithm] ๋ถํ ์ ๋ณต / ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
2024.05.07