๐ ๏ธ Pi-Server๋ง๋ค๊ธฐ ssh์ฐ๊ฒฐํธ: cloudflared๊ธฐ๋ฐ SSH์ด๊ธฐ
๐ง title: Cloudflare Tunnel + Access๋ก SSH ์ด๊ธฐ (์คํจ ๋ก๊ทธ ํฌํจ ์ค์ ํํ ๋ฆฌ์ผ)
1๏ธโฃ ๋ด๊ฐ ์ด ์์ ์ ์์ํ ์ด์
์ง์ ์๋ ์๋ฒ(๋ผ์ฆ๋ฒ ๋ฆฌํ์ด)์ ttyd๋ก ์ ์ ํ๋ ๋ฐฉ์์ ํ๊ณ๋ฅผ ๋๊ผ๋คโฆ ๊ตฐ ๋ถ๋์์ ์ฌ์ฉํ๊ธฐ ์ํด ssh์ ํ๋ค๊บผ ๊ฐ์ผ๋(์ฐธ๊ณ ๋ก ์ธ์ง๋ฐฉ ์ปด์ cmd๋ ์์ด๋ฆฐ๋คโฆ) ttyd๋ฅผ ์ฌ์ฉ ํ๋ ๊ฑด๋ฐ ์๋ฌดํผ ๋ฒ๋ฒ ์ธ๋ค(์์ฒญ;;) ๊ทธ๋์ ๊ทธ๋ฅ ํด๋ํฐ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ค ํ๋ค. Termux์์ ์์ ํ๋๊ฒ ํจ์ฌ ์คํธ๋ ์ค๋ฅผ ๋ ๋ฐ์๊บผ ๊ฐ์ ๋ฏธ๋ค์๋ ssh์ฐ๊ฒฐ ์ถ๊ฐ๋ฅผ ์ด๋ฒ ํด๊ฐ์ ํ๋ คํ๋ค. ํ์ง๋ง ๋ ์ฌ์ ํ ํฌํธํฌ์๋ฉ์ผ๋ก 22๋ฒ ํฌํธ๋ฅผ ์ด์ด๋๋ ๋ฐฉ์์ด๋ ๊ณต์ธ IP๋ฅผ ๊ทธ๋๋ก ๋ ธ์ถํ๋ ๊ตฌ์กฐ๋ ์ฐ๊ณ ์ถ์ง ์์๋ค. ๊ฑฐ๊ธฐ์ ์ด๋ฏธ ์ด์ ์์ ์์ ํ๋ cloudflared ํฐ๋๋ ์ด๋ฏธ ์๊ฒ ๋ค. ๊ทธ๋ฅ ๊ธฐ์กด์ ์๋ cludflared tunnel์ ๊ทธ๋๋ก ์ฌ์ฉ ํ๊ธฐ๋ฌ ํ๋ค.
๊ทธ๋์ Cloudflare Tunnel๊ณผ Access๋ฅผ ์ฌ์ฉํด์,
- ์๋ฒ๋ ๋ด๋ถ๋ง ๊ทธ๋๋ก ๋๊ณ
- ์ธ๋ถ์์๋ ์ธ์ฆ๋ ๋๋ง ์ ์ ๊ฐ๋ฅํ๊ฒ
- PC, ๋ ธํธ๋ถ, Termux ํ๊ฒฝ ์ด๋์๋
์๋ ํ ์ค๋ก ์ ์๋๋ ์ํ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์๋ค.
1
ssh m0s
2๏ธโฃ ์์ ํ๊ฑฐ ์ ๋ฆฌํ ํํ ๋ฆฌ์ผ
โ 1. ์๋ฒ์์ SSH ์๋น์ค๊ฐ ์ ์ ๋์ํ๋ ์ํ๋ฅผ ๋จผ์ ๋ง๋ ๋ค
Cloudflare Tunnel์ด๋ Access๋ ๊ธฐ์กด ์๋น์ค๋ฅผ โ๋์ฒดโํ์ง ์๋๋ค. ์ด๋๊น์ง๋ ์ด๋ฏธ ์ ์ ๋์ ์ค์ธ ์๋น์ค ์์ ์น๋ ํ๋ก์ ๋ ์ด์ด๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์, ์๋ฒ ์์ฒด์์ SSH๊ฐ ์์ ํ ์ ์์ธ์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
1
2
3
sudo systemctl enable ssh
sudo systemctl start ssh
systemctl status ssh
์ด ์ํ์์ ๊ฐ์ ์๋ฒ ๋ด๋ถ์์ ์ง์ SSH ์ ์ ํ ์คํธ๋ฅผ ์งํํ๋ค.
1
ssh m0squito@localhost
์ด ๋จ๊ณ๊ฐ ์ค์ํ ์ด์ ๋, ์ดํ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ โSSH ์์ฒด ๋ฌธ์ โ์ โTunnel/Access ๋ฌธ์ โ๋ฅผ ๋ถ๋ฆฌํด์ ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๊ธฐ์ ์ด๋ฏธ ์คํจํ๋ฉด ์ดํ ์ค์ ์ ์ ๋ถ ์๋ฏธ๊ฐ ์๋ค.
โ๏ธ 2. systemd์์ cloudflared๊ฐ config.yml์ ์ฝ๋๋ก ์ค์ ํ๋ค
๊ธฐ์กด์ ์ฌ์ฉ ์ค์ด๋ cloudflared Tunnel์ ์น ์๋น์ค์ฉ์ผ๋ก๋ง ๊ตฌ์ฑ๋ผ ์์๊ณ , SSH ingress๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด config ํ์ผ ๊ธฐ๋ฐ ์คํ์ด ํ์์๋ค.
cloudflared๋ ์คํ ๋ฐฉ์์ ๋ฐ๋ผ ๋์์ด ์์ ํ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์, systemd ์๋น์ค์์ ๋ช
์์ ์ผ๋ก --config ์ต์
์ ์ง์ ํ๋ค.
1
sudo nano /etc/systemd/system/cloudflared.service
1
2
3
4
[Service]
ExecStart=/usr/local/bin/cloudflared --config /home/m0squito/.cloudflared/config.yml tunnel run
User=m0squito
Restart=always
์ด ์ค์ ์ ํต์ฌ์ ๋ ๊ฐ์ง๋ค.
--url๊ธฐ๋ฐ ์คํ์ ์์ ํ ๋ฐฐ์ - ingress / Access / SSH ์ค์ ์ ์ ๋ถ config.yml ๊ธฐ์ค์ผ๋ก ํตํฉ
์์ ํ์๋ ๋ฐ๋์ ๋ฐ๋ชฌ์ ๋ค์ ๋ก๋ํ๊ณ ์๋น์ค๋ฅผ ์ฌ์์ํ๋ค.
1
2
3
sudo systemctl daemon-reload
sudo systemctl restart cloudflared
systemctl status cloudflared
์ด ์์ ๋ถํฐ cloudflared๋ ์ค์ ํ์ผ์ โ์ง์ง๋กโ ์ฝ๋ ์ํ๊ฐ ๋๋ค.
๐ 3. cloudflared ์ค์ ํ์ผ์ SSH ingress๋ฅผ ์ถ๊ฐํ๋ค
๊ธฐ์กด์ ์ฌ์ฉ ์ค์ด๋ ~/.cloudflared/config.yml์ SSH ์ ์์ ์ํ ingress ๊ท์น์ ์ถ๊ฐํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
tunnel: m0s-tunnel
credentials-file: /home/m0squito/.cloudflared/XXXX.json
ingress:
- hostname: tunnel.m0squito.dev
service: http://localhost:3000
- hostname: ssh.m0squito.dev
service: ssh://localhost:22
- service: http_status:404
์ฌ๊ธฐ์ ์ค์ํ ํฌ์ธํธ๋:
- SSH๋ http๊ฐ ์๋๋ผ
ssh://์คํด์ ์ฌ์ฉ - ํฌํธ ํฌ์๋ฉ ์์ด ๋ก์ปฌ 22๋ฒ ํฌํธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ
- ingress๋ ์์์ ์๋๋ก ๋งค์นญ๋๋ฏ๋ก ์์ ์ ์ง
์ด ์ค์ ์ผ๋ก ssh.m0squito.dev โ cloudflared โ ๋ก์ปฌ SSH ๋ฐ๋ชฌ ์ด๋ผ๋ ๊ฒฝ๋ก๊ฐ ์์ฑ๋๋ค.
๐ 4. Tunnel๊ณผ SSH ๋๋ฉ์ธ์ DNS๋ก ์ฐ๊ฒฐํ๋ค
Cloudflare DNS ๋์๋ณด๋์์ ์ง์ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ , cloudflared ๋ช ๋ น์ ์ฌ์ฉํด ํฐ๋ ๋ผ์ฐํ ์ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํ๋ค.
1
cloudflared tunnel route dns m0s-tunnel ssh.m0squito.dev
์ด ๋ช ๋ น์ ์คํํ๋ฉด:
ssh.m0squito.dev์ ๋ํ CNAME ๋ ์ฝ๋๊ฐ ์๋ ์์ฑ- ํด๋น ๋๋ฉ์ธ์ ์ค์ง ํด๋น Tunnel๋ก๋ง ์ฐ๊ฒฐ
์ฆ, ๊ณต์ธ IP๋ ํฌํธ๋ ๋๊น์ง ๋ ธ์ถ๋์ง ์๋๋ค.
๐ 5. Cloudflare Access์์ SSH ์ ์ฉ Application์ ๋ง๋ ๋ค
Zero Trust ๋์๋ณด๋์์ SSH ์ ์ฉ Access Application์ ์์ฑํ๋ค.
์ค์ ์์ฝ:
- ์ ํ: ์์ฒด ํธ์คํ
- Application type: SSH
- ๊ณต๊ฐ ํธ์คํธ ์ด๋ฆ:
ssh.m0squito.dev - ์ ์ฑ : Allow + ๋ณธ์ธ ์ด๋ฉ์ผ
Application type์ SSH๋ก ์ง์ ํ์ง ์์ผ๋ฉด, Access๊ฐ ํธ๋ํฝ์ HTTP๋ก ์ค์ธํด 302 ๋ฆฌ๋ค์ด๋ ํธ๋ ์ธ์ฆ ๋ฃจํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด ์ค์ ์ผ๋ก Access๋ โ์ด ํธ๋ํฝ์ ์น์ด ์๋๋ผ SSH๋คโ ๋ผ๊ณ ์ ํํ ์ธ์ํ๊ฒ ๋๋ค.
๐งฉ 6. ํด๋ผ์ด์ธํธ SSH config์ ProxyCommand๋ฅผ ์ถ๊ฐํ๋ค
๋งค๋ฒ cloudflared ๋ช ๋ น์ ์ง์ ์ ๋ ฅํ๋ ๋์ , ํด๋ผ์ด์ธํธ ์ชฝ SSH ์ค์ ํ์ผ์ ProxyCommand๋ฅผ ๋ฑ๋กํ๋ค.
1
nano ~/.ssh/config
Host m0s
HostName ssh.m0squito.dev
User m0squito
ProxyCommand cloudflared access ssh --hostname %h
์ด ์ค์ ์ ํจ๊ณผ๋:
- SSH ์ ์ ์ cloudflared๊ฐ ์๋์ผ๋ก Access ์ธ์ฆ ์ฒ๋ฆฌ
- ํ ํฐ/๋ธ๋ผ์ฐ์ ์ธ์ฆ์ Access๊ฐ ๋ด๋น
- SSH ํค๋ ๊ธฐ์กด ๋ฐฉ์ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
์ดํ์๋ ์๋ ๋ช ๋ น ํ๋๋ก ์ ์์ด ๊ฐ๋ฅํด์ง๋ค.
1
ssh m0s
๐งฑ 3) ์์ ํ๋ฉด์ ์๊ฐ๋ ๋ฌธ์ ๋ค
โ cloudflared๊ฐ config.yml์ ์ฝ์ง ์์
- ๋ฌธ์ ๋ฐ์: ingress๋ฅผ ์ถ๊ฐํด๋ SSH๊ฐ ์ ํ ์ด๋ฆฌ์ง ์์๋ค.
- ๋ถ์: systemd ์๋น์ค๊ฐ CLI ๋ชจ๋๋ก ์คํ ์ค์ด๋ผ ์ค์ ํ์ผ์ ๋ฌด์ํ๊ณ ์์๋ค.
- ํด๊ฒฐ:
ExecStart์--config์ต์ ์ ๋ช ์ํด config.yml์ ๊ฐ์ ๋ก ์ฌ์ฉํ๋๋ก ์์ ํ๋ค.
โ DNS์์ A ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ์๋ํจ
- ๋ฌธ์ ๋ฐ์: Cloudflare DNS์์ A ๋ ์ฝ๋์ IP๋ฅผ ๋ฃ์ผ๋ ค ํ๋ค.
- ๋ถ์: Tunnel ๊ตฌ์กฐ์์๋ IP ๊ธฐ๋ฐ ์ฐ๊ฒฐ์ด ์๋๋ค.
- ํด๊ฒฐ:
cloudflared tunnel route dns๋ก CNAME์ ์์ฑํ๋ค.
โ ์ผ๋ฐ SSH๋ก ๋ฐ๋ก ์ ์ ์๋
- ๋ฌธ์ ๋ฐ์:
ssh user@ssh.domain์ผ๋ก ์ ์ ์ ๋ฌดํ ๋ก๋ฉ ๋๋ UNKNOWN port ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. - ๋ถ์: Access ์ธ์ฆ์ ํต๊ณผํ์ง ์์ ํธ๋ํฝ์ด์๋ค.
- ํด๊ฒฐ: Access๋ฅผ ๊ฑฐ์น์ง ์์ SSH๋ ์ ์ ๋์ํ์ง ์๋ ๊ตฌ์กฐ์์ ํ์ธํ๋ค.
โ Access ์ฑ์ SSH ํ์ ์ผ๋ก ๋ง๋ค์ง ์์
- ๋ฌธ์ ๋ฐ์: Access Application์ ๋ง๋ค์๋๋ฐ ์ ์์ด ๋์ง ์์๋ค.
- ๋ถ์: Application type์ด SSH๊ฐ ์๋์๋ค.
- ํด๊ฒฐ: SSH ํ์ ์ผ๋ก ๋ค์ ์์ฑํ๊ณ ๊ณต๊ฐ ํธ์คํธ ์ด๋ฆ์ ์ ํํ ์ง์ ํ๋ค.
โ cloudflared access ssh๋ง ์คํํ๊ณ ๋๋
- ๋ฌธ์ ๋ฐ์: ์ด๋ฉ์ผ ์ธ์ฆ์ ๋๋๋ฐ ์ ธ์ด ์ด๋ฆฌ์ง ์์๋ค.
- ๋ถ์: ํด๋น ๋ช ๋ น์ ์ธ์ฆ ์ธ์ ๋ง ์์ฑํ๋ค.
- ํด๊ฒฐ: SSH config์์ ProxyCommand๋ก ์ฐ๊ฒฐํ๋ค.
๐ 4) ์์ ํ๊ธฐ ๋ฐ ๋ค์ ์์ ์์
์ด๋ฒ ์์
์ ์๋ ์ ์ญ ํ ์ดํ์ ๋ด ๊ธฐ๊ธฐ๋ค ์ฌ์ด์ ์๋ํ๋ฅผ ์ํด ํ๋ ค ํ๋๊ฑด๋ฐโฆ ๋ญ ์ง๊ธ ํด ๋ฒ๋ ธ์ผ๋ ๊ทธ๋ฅ ์ง๊ธ๋ถํฐ ์๋ํ ํด ๋ณด๋ ค ํ๋ค. ์ต๊ทผ์ ๋ Tasker๋ผ๋ ์ฑ๋ ์ฐพ์์ Termux๋ ์ฐ๊ณํด ๋ค์ํ ๊ฑธ ์คํํด ๋ณผ ์๊ฐ์ด๋ค.