SSH ์ง€์›

์ด ํŽ˜์ด์ง€์—์„œ๋Š” gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSH(๋˜๋Š” ๊ธฐํƒ€ ๋ชจ๋“  TCP ํ”„๋กœํ† ์ฝœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์›Œํฌ์Šคํ…Œ์ด์…˜์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Cloud Workstations๋Š” ํ„ฐ๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌ์Šคํ…Œ์ด์…˜์„ ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ์ ์œผ๋กœ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ ๋กœ์ปฌ ๋จธ์‹ ์˜ ํฌํŠธ์™€ ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ ํฌํŠธ ๊ฐ„์— TCP ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์€ gcloud CLI์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ธ์ฆ๋˜๊ณ  ๋Œ€์ƒ ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ IAM ์ •์ฑ…์— ๋”ฐ๋ผ ์Šน์ธ๋ฉ๋‹ˆ๋‹ค.

TCP ํ„ฐ๋„์ด ๋กœ์ปฌ ํฌํŠธ์™€ ์›Œํฌ์Šคํ…Œ์ด์…˜ ์‚ฌ์ด์— ์„ค์ •๋˜๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSH ํด๋ผ์ด์–ธํŠธ, curl ๋˜๋Š” TCP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐํƒ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด Cloud Workstations๋Š” ๋‹จ์ผ gcloud CLI ๋ช…๋ น์–ด๋กœ TCP ํ„ฐ๋„์„ ์„ค์ •ํ•˜๊ณ  SSH ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” gcloud workstations ssh ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ gcloud workstations start-tcp-tunnel ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TCP ํ„ฐ๋„์„ ์„ค์ •ํ•˜๊ณ  ํ„ฐ๋„์„ ์‚ฌ์šฉํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ:curl)์„ ๋ณ„๋„์˜ ํ„ฐ๋„์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

  1. ์•„์ง ์—ฐ๊ฒฐํ•  ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ์—†์œผ๋ฉด ์›Œํฌ์Šคํ…Œ์ด์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜์— ๋Œ€ํ•œ Cloud Workstations ์‚ฌ์šฉ์ž IAM ์—ญํ• ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    IAM์œผ๋กœ ์ด๋™

SSH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌ์Šคํ…Œ์ด์…˜์— ์—ฐ๊ฒฐ

์›Œํฌ์Šคํ…Œ์ด์…˜์— ์•ˆ์ „ํ•œ SSH ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ ค๋ฉด TCP ํ„ฐ๋„์„ ์‹œ์ž‘ํ•˜๊ณ  SSH ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” gcloud workstations ssh ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด๋ฅผ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฒ„ํผ์— ๋ณต์‚ฌํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ƒ˜ํ”Œ ๋ณต์‚ฌ๋ฅผ ํด๋ฆญํ•œ ํ›„ ๋ช…๋ น์–ด๋ฅผ ๋กœ์ปฌ ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME  \
    --port=WORKSTATION_PORT  \
    --local-host-port=localhost:LOCAL_PORT  \
    WORKSTATION_NAME

๋‹ค์Œ ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ์˜ Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • REGION: ์›Œํฌ์Šคํ…Œ์ด์…˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค(์˜ˆ: us-central1).

  • CLUSTER_NAME: ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ์›Œํฌ์Šคํ…Œ์ด์…˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • CONFIG_NAME: ์ด ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ์›Œํฌ์Šคํ…Œ์ด์…˜ ๊ตฌ์„ฑ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • WORKSTATION_PORT (์„ ํƒ์‚ฌํ•ญ): ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•  ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•  ๊ฒฝ์šฐ ํŠธ๋ž˜ํ”ฝ์€ ํฌํŠธ 22๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ๋ชจ๋“  Cloud Workstations ์ด๋ฏธ์ง€์—๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜ ํฌํŠธ 22์—์„œ ์‹คํ–‰๋˜๋Š” SSH ์„œ๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • LOCAL_PORT(์„ ํƒ์‚ฌํ•ญ): ํŠธ๋ž˜ํ”ฝ์ด ์ „์†ก๋  localhost ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 1024~65535์ž…๋‹ˆ๋‹ค. --local-host-port ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ 0 ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํฌํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

  • WORKSTATION_NAME: ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์„ ํƒ์‚ฌํ•ญ: ํ”Œ๋ž˜๊ทธ์™€ ์œ„์น˜๋ฅผ ๊ธฐ๋ณธ ssh ๊ตฌํ˜„์— ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋ช…๋ น์–ด์— ์ด์ค‘ ๋Œ€์‹œ(--) ๋’ค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

TCP ํ„ฐ๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์˜์˜ TCP ํŠธ๋ž˜ํ”ฝ์„ ์›Œํฌ์Šคํ…Œ์ด์…˜์œผ๋กœ ์ „๋‹ฌ

ssh ์ด์™ธ์˜ TCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌ์Šคํ…Œ์ด์…˜์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด gcloud workstations start-tcp-tunnel ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ gcloud CLI ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ์ฆ๋œ TCP ํ„ฐ๋„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ๋ช…๋ น์–ด๋ฅผ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฒ„ํผ์— ๋ณต์‚ฌํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ƒ˜ํ”Œ ๋ณต์‚ฌ๋ฅผ ํด๋ฆญํ•œ ํ›„ ๋ช…๋ น์–ด๋ฅผ ๋กœ์ปฌ ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        WORKSTATION_PORT
    

    ๋‹ค์Œ ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ์˜ Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • REGION: ์›Œํฌ์Šคํ…Œ์ด์…˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค(์˜ˆ: us-central1).

    • CLUSTER_NAME: ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ์›Œํฌ์Šคํ…Œ์ด์…˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    • CONFIG_NAME: ์ด ์›Œํฌ์Šคํ…Œ์ด์…˜์ด ํฌํ•จ๋œ ์›Œํฌ์Šคํ…Œ์ด์…˜ ๊ตฌ์„ฑ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    • LOCAL_PORT(์„ ํƒ์‚ฌํ•ญ): ํŠธ๋ž˜ํ”ฝ์ด ์ „์†ก๋  localhost ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 1024~65535์ž…๋‹ˆ๋‹ค. --local-host-port ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ 0 ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํฌํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

    • WORKSTATION_NAME: ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    • WORKSTATION_PORT: ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•  ์›Œํฌ์Šคํ…Œ์ด์…˜ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ๋ชจ๋“  Cloud Workstations ์ด๋ฏธ์ง€์—๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜ ํฌํŠธ 22์—์„œ ์‹คํ–‰๋˜๋Š” SSH ์„œ๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  2. gcloud CLI ๋ช…๋ น์–ด๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ„ฐ๋„์„ ์—ด๊ณ  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    Listening on port [LOCAL_PORT].
    

    localhost:LOCAL_PORT๋กœ ์ „์†ก๋˜๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ์›Œํฌ์Šคํ…Œ์ด์…˜์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํฌํŠธ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. gcloud CLI๋ฅผ ์‹คํ–‰ ์ƒํƒœ๋กœ ๋‘๊ณ  ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด ์›Œํฌ์Šคํ…Œ์ด์…˜์— ์—ฐ๊ฒฐ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ํฌํŠธ WORKSTATION_PORT๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋กœ์ปฌ ํฌํŠธ LOCAL_PORT์™€ ์›Œํฌ์Šคํ…Œ์ด์…˜ ํฌํŠธ WORKSTATION_PORT ์‚ฌ์ด์— ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋Š” TCP ํ„ฐ๋„์„ ๋งŒ๋“  ๊ฒฝ์šฐ, ๋กœ์ปฌ ๋จธ์‹ ์—์„œ curl์„ ์‹คํ–‰ํ•˜์—ฌ ์›Œํฌ์Šคํ…Œ์ด์…˜์˜ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    curl localhost:LOCAL_PORT
    Hello, world!
    
  4. ์™„๋ฃŒ๋˜๋ฉด TCP ํ„ฐ๋„์„ ์‹œ์ž‘ํ•œ ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„๊ฐ€ Control+C๋ฅผ ๋ˆŒ๋Ÿฌ gcloud CLI๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํฌํŠธ์—์„œ SSH ์„œ๋ฒ„ ์‚ฌ์šฉ

์ปค์Šคํ…€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ๋ชจ๋“  ํฌํŠธ์—์„œ SSH ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. gcloud CLI ํ„ฐ๋„์˜ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋ ค๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ํ—ˆ์šฉํ•˜๊ณ  ํƒ€๊ฒŸ ์‚ฌ์šฉ์ž๋ฅผ ๋นˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์„ค์ •ํ•˜๋„๋ก ์ปค์Šคํ…€ SSH ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud Workstations๋Š” Cloud IAM์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šน์ธ๋œ ํŠธ๋ž˜ํ”ฝ๋งŒ SSH ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„