์ด ๊ฒ์๋ฌผ์์๋ ์คํ๋ผ์ธ์์ ํ๋์จ์ด ๋ณด์ ํค๋ฅผ ์ฌ์ฉํ์ฌ SSH ํธ์คํธ์ ๊ธด๊ธ ์ก์ธ์คํ๋ ์ ์ฐจ๋ฅผ ๊ฐ๋ฐํ ๊ฒ์
๋๋ค. ์ด๋ ํ๋์ ์ ๊ทผ ๋ฐฉ์์ผ ๋ฟ์ด๋ฏ๋ก ํ์์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ํ๋์จ์ด ๋ณด์ ํค์ ํธ์คํธ์ ๋ํ SSH ์ธ์ฆ ๊ธฐ๊ด์ ์ ์ฅํฉ๋๋ค. ์ด ์ฒด๊ณ๋ Single Sign-On์ ์ฌ์ฉํ๋ SSH๋ฅผ ํฌํจํ์ฌ ๊ฑฐ์ ๋ชจ๋ OpenSSH์์ ์๋ํฉ๋๋ค.
์ด๊ฒ ๋ค ๋ญ์ฃ ? ๊ธ์, ์ด๊ฒ์ ์ตํ์ ์๋จ ์ต์
์
๋๋ค. ์ด๊ฒ์ ์ด๋ค ์ด์ ๋ก๋ ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์์ ๋ ์๋ฒ์ ์ก์ธ์คํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฑ๋์ด์
๋๋ค.
๊ธด๊ธ ์ก์ธ์ค๋ฅผ ์ํด ๊ณต๊ฐ/๊ฐ์ธ ํค ๋์ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
- ๊ณต๊ฐ ํค์ ๋ฌ๋ฆฌ ์ธ์ฆ์์ ์๋ช ์ ๋งค์ฐ ์งง์ ์ ์์ต๋๋ค. 1๋ถ ๋๋ 5์ด ๋์ ์ ํจํ ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์ ์ฐ๊ฒฐ์ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋น์ ์ ๊ทผ์ ์ด์์ ์ ๋๋ค.
- ํธ์คํธ์ ๋ชจ๋ ๊ณ์ ์ ๋ํ ์ธ์ฆ์๋ฅผ ์์ฑํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ด๋ฌํ "์ผํ์ฑ" ์ธ์ฆ์๋ฅผ ๋๋ฃ์๊ฒ ๋ณด๋ผ ์ ์์ต๋๋ค.
ํ์ํ ๊ฒ
- ์์ฃผ ํค๋ฅผ ์ง์ํ๋ ํ๋์จ์ด ๋ณด์ ํค์
๋๋ค.
์์ฃผ ํค๋ ๋ณด์ ํค ๋ด์ ์์ ํ ์ ์ฅ๋๋ ์ํธํ ํค์ ๋๋ค. ๋๋ก๋ ์์ซ์ PIN์ผ๋ก ๋ณดํธ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์์ฃผ ํค์ ๊ณต๊ฐ ๋ถ๋ถ์ ์ ํ์ ์ผ๋ก ๊ฐ์ธ ํค ํธ๋ค๊ณผ ํจ๊ป ๋ณด์ ํค์์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Yubikey 5 ์๋ฆฌ์ฆ USB ํค๋ ์์ฃผ ํค๋ฅผ ์ง์ํ๋ฉฐ ํธ์คํธ์ ๋ํ ๊ธด๊ธ ์ก์ธ์ค์ฉ์ผ๋ก๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ ํ๋์ ํค๋ง ์ฌ์ฉํ์ง๋ง ๋ฐฑ์ ์ ์ํด ์ถ๊ฐ ํค๊ฐ ์์ด์ผ ํฉ๋๋ค. - ํด๋น ํค๋ฅผ ๋ณด๊ดํ ์ ์๋ ์์ ํ ์ฅ์์ ๋๋ค.
- ๋ก์ปฌ ์ปดํจํฐ์ ๋น์ ์ก์ธ์ค๋ฅผ ์ํ๋ ์๋ฒ์ OpenSSH ๋ฒ์ 8.2 ์ด์์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. Ubuntu 20.04๋ OpenSSH 8.2์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
- (์ ํ์ฌํญ์ด์ง๋ง ๊ถ์ฅ๋จ) ์ธ์ฆ์ ํ์ธ์ ์ํ CLI ๋๊ตฌ์ ๋๋ค.
ํ๋ จ
๋จผ์ , ํ๋์จ์ด ๋ณด์ ํค์ ์์นํ ์ธ์ฆ ๊ธฐ๊ด์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํค๋ฅผ ์ฝ์ ํ๊ณ ๋ค์์ ์คํํฉ๋๋ค.
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
์ฝ๋ฉํธ(-C)๋ก ํ์ํ์ต๋๋ค. [์ด๋ฉ์ผ ๋ณดํธ]๋ฐ๋ผ์ ์ด ์ธ์ฆ ๊ธฐ๊ด์ด ์ด๋ค ๋ณด์ ํค์ ์ํด ์๋์ง ์์ง ๋ง์ธ์.
Yubikey์ ํค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ์ธ์๋ ๋ ๊ฐ์ ํ์ผ์ด ๋ก์ปฌ๋ก ์์ฑ๋ฉ๋๋ค.
- sk-user-ca, ๋ณด์ํค์ ์ ์ฅ๋ ๊ฐ์ธํค๋ฅผ ์ฐธ์กฐํ๋ ํคํธ๋ค,
- sk-user-ca.pub๋ ์ธ์ฆ ๊ธฐ๊ด์ ๊ณต๊ฐ ํค๊ฐ ๋ฉ๋๋ค.
ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์. Yubikey๋ ๊ฒ์ํ ์ ์๋ ๋ ๋ค๋ฅธ ๊ฐ์ธ ํค๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ์ ๋ขฐํ ์ ์์ต๋๋ค.
ํธ์คํธ์์ ๋ฃจํธ๋ก SSHD ๊ตฌ์ฑ(/etc/ssh/sshd_config)์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค(์์ง ์ถ๊ฐํ์ง ์์ ๊ฒฝ์ฐ).
TrustedUserCAKeys /etc/ssh/ca.pub
๊ทธ๋ฐ ๋ค์ ํธ์คํธ์์ /etc/ssh/ca.pub์ ๊ณต๊ฐ ํค(sk-user-ca.pub)๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ฐ๋ชฌ์ ๋ค์ ์์ํฉ๋๋ค.
# /etc/init.d/ssh restart
์ด์ ํธ์คํธ์ ์ ๊ทผ์ ์๋ํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋จผ์ ์ธ์ฆ์๊ฐ ํ์ํฉ๋๋ค. ์ธ์ฆ์์ ์ฐ๊ฒฐ๋ ํค ์์ ๋ง๋ญ๋๋ค.
$ ssh-keygen -t ecdsa -f emergency
์ธ์ฆ์ ๋ฐ SSH ์
๋๋ก๋ ๊ณต๊ฐ/๊ฐ์ธ ํค ์์ ๋์ฒดํ๊ธฐ ์ํด ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ์ ํน์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ฆ์๋ง์ผ๋ก๋ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๋ฐ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๊ฐ ์ธ์ฆ์์๋ ์ด์ ๊ด๋ จ๋ ๊ฐ์ธ ํค๋ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๊ธฐ ์ ์ ์ด "๊ธด๊ธ" ํค ์์ ์์ฑํด์ผ ํ๋ ์ด์ ์ ๋๋ค. ์ค์ํ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ธ ํค๋ฅผ ๊ฐ์ง๊ณ ์๋ ํค ์์ ๋ํ๋ด๋ ์๋ช ๋ ์ธ์ฆ์๋ฅผ ์๋ฒ์ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค.๋ฐ๋ผ์ ๊ณต๊ฐ ํค ๊ตํ์ ์ฌ์ ํ โโ์ ํจํฉ๋๋ค. ์ด๋ ์ธ์ฆ์์์๋ ์๋ํฉ๋๋ค. ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ๊ณต๊ฐ ํค๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ด์ง๋๋ค.
๋ค์์ผ๋ก ์ธ์ฆ์ ์์ฒด๋ฅผ ๋ง๋ญ๋๋ค. 10๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์ฐ๋ถํฌ ์ฌ์ฉ์ ์ธ์ฆ์ด ํ์ํฉ๋๋ค. ๋น์ ์ ๋น์ ์ ๋ฐฉ์๋๋ก ํ ์ ์์ต๋๋ค.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
์ง๋ฌธ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ์์ ์๋ช ํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. -n ubuntu,carl,ec2-user์ ๊ฐ์ด ์ผํ๋ก ๊ตฌ๋ถ๋ ์ถ๊ฐ ์ฌ์ฉ์ ์ด๋ฆ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ด์ ์ธ์ฆ์๊ฐ ์๊ฒผ์ต๋๋ค! ๋ค์์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ถํ์ ์ง์ ํด์ผ ํฉ๋๋ค.
$ chmod 600 emergency-cert.pub
๊ทธ๋ฐ ๋ค์ ์ธ์ฆ์ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
$ step ssh inspect emergency-cert.pub
๋ด ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
emergency-cert.pub
Type: [email protected] user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
์ฌ๊ธฐ์ ๊ณต๊ฐํค๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋น์ํค์ด๊ณ , sk-user-ca๋ ์ธ์ฆ๊ธฐ๊ด๊ณผ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก SSH ๋ช ๋ น์ ์คํํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- ์ด์ ์ธ์ฆ ๊ธฐ๊ด์ ์ ๋ขฐํ๋ ํธ์คํธ์ ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๊ธด๊ธ์ ํด์ ํ ์ ์์ต๋๋ค. sk-user-ca๋ฅผ ์ ์ฅํ ์ ์์ง๋ง ๋ณด์ ํค์๋ ์์ผ๋ฏ๋ก ์ ์ฅํ ํ์๋ ์์ต๋๋ค. ๋น์ ์ก์ธ์ค์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํธ์คํธ์์ ์๋ณธ PEM ๊ณต๊ฐ ํค๋ฅผ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค(์: ubuntu ์ฌ์ฉ์์ ๊ฒฝ์ฐ ~/.ssh/authorized_keys).
๊ธด๊ธ ์ ๊ทผ: ์คํ ๊ณํ
๋ณด์ ํค๋ฅผ ๋ถ์ฌ๋ฃ๊ณ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ ssh-add -K
๊ทธ๋ฌ๋ฉด ์ธ์ฆ ๊ธฐ๊ด์ ๊ณต๊ฐ ํค์ ํค ์ค๋ช ์๊ฐ SSH ์์ด์ ํธ์ ์ถ๊ฐ๋ฉ๋๋ค.
์ด์ ๊ณต๊ฐ ํค๋ฅผ ๋ด๋ณด๋ด ์ธ์ฆ์๋ฅผ ๋ง๋ญ๋๋ค.
$ ssh-add -L | tail -1 > sk-user-ca.pub
์๋ฅผ ๋ค์ด ๋ง๋ฃ ๋ ์ง๊ฐ XNUMX์๊ฐ ์ดํ์ธ ์ธ์ฆ์๋ฅผ ๋ง๋ญ๋๋ค.
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
์ด์ ๋ค์ SSH๋ฅผ ์ํํฉ๋๋ค.
$ ssh -i emergency username@host
.ssh/config ํ์ผ์ด ์ฐ๊ฒฐ ์ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒฝ์ฐ -F none ์ต์
์ ์ฌ์ฉํ์ฌ ssh๋ฅผ ์คํํ์ฌ ์ด๋ฅผ ์ฐํํ ์ ์์ต๋๋ค. ๋๋ฃ์๊ฒ ์ธ์ฆ์๋ฅผ ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฝ๊ณ ์์ ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์์ ์ ๊ฐ ์ข์ํ๋ ์ ์ ํ๋์จ์ด ์ง์์ ๋๋ค. ๋ณด์ ํค๋ฅผ ๊ธ๊ณ ์ ๋ฃ์ด๋๋ฉด ์๋ฌด๋ฐ๋ ๊ฐ์ง ์์ต๋๋ค.
๊ด๊ณ ์ ๊ถ๋ฆฌ์
์ํฝ ์๋ฒ -๊ฐ์
์ถ์ฒ : habr.com