케미클라우드 등 cPanel 공유호스팅에서 SSH로 접속하는 방법. SSH 키를 만들어 cPanel에 등록(Import 후 Authorize)하면 되고, 포트는 22가 아닌 1988입니다. 6개 계정에 적용한 기록과 함정 4가지.
ChemiCloud 같은 cPanel 공유호스팅은 SSH 키를 등록하면 AI 코딩 에이전트가 서버 상태를 직접 읽을 수 있습니다. 등록은 공개키 1개를 계정마다 cPanel에 Import하고 Authorize하는 것으로 끝나며, 접속 포트는 22번이 아닌 1988번입니다. 이 글은 6개 계정에 실제로 적용한 기록입니다.
최종 업데이트: 2026-08-03 · 환경: ChemiCloud 공유호스팅(cPanel) 6계정
왜 등록했나 — AI가 서버를 못 보면 추측하기 시작한다
그동안 AI에게 코드 수정을 맡길 때 패턴이 이랬습니다. AI가 코드를 쓰고, 제가 FTP로 올리고, 문제가 생기면 제가 로그를 복사해서 붙여넣습니다. AI는 서버를 못 보니까 "아마 PHP 버전 때문일 겁니다" 같은 추측을 합니다. 그 추측이 틀리면 왕복이 한 번 더 늘어납니다.
결정적이었던 건 이겁니다. 제가 관리하는 서버 중에 SSH가 열려 있는 곳이 있는데도, AI가 그 사실을 모른 채 작업하고 있었습니다. 접속 정보가 여러 문서에 흩어져 있어서 "지금 이 서버에 붙을 수 있는가"를 판단할 근거가 없었던 겁니다.
공유호스팅은 원래 SSH가 안 되는 줄 알았는데, 확인해 보니 됐습니다. 그래서 계정 전부에 등록했습니다.
준비물
| 항목 | 내용 |
|---|---|
| 호스팅 | ChemiCloud 공유호스팅(cPanel) — 계정마다 cPanel 접근 권한 |
| 로컬 | ssh-keygen·ssh 명령 (Windows는 Git Bash 또는 기본 OpenSSH) |
| 접속 포트 | 1988 — 공식 문서 How to Log in to Your Account via SSH에 "we use port 1988 for SSH access"로 명시 |
| 소요 시간 | 계정당 2~3분 (키 생성은 최초 1회) |
어떻게 등록하나 — 5단계
1. 키를 만든다 (계정 수와 무관하게 딱 한 번)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/chemicloud_office -N "" -C "office-pc-2026-08-03"
- -b 4096 — RSA 4096. cPanel 호환성이 가장 확실합니다.
- -N "" — passphrase 없음. 이유는 아래 별도 섹션에 적었습니다.
- 파일명에 PC를 드러냅니다(_office / _home). 나중에 cPanel 키 목록에서 어느 PC 것인지 바로 구분됩니다.
옵션의 정확한 의미는 OpenSSH ssh-keygen 매뉴얼에 있습니다.
2. cPanel에 공개키를 Import한다
계정마다 반복합니다. Security → SSH Access → Manage SSH Keys → Import Key
- Name: 키 파일명과 동일하게 (chemicloud_office)
- Public Key 칸에만 ~/.ssh/chemicloud_office.pub 내용을 붙여넣습니다
- Private Key 칸은 비웁니다. 개인키는 서버에 올리지 않습니다
3. Authorize한다 — 여기서 가장 많이 막힌다
4. ~/.ssh/config에 별칭을 만든다
Host chemicloud-{계정}
HostName {서버IP}
Port 1988
User {계정}
IdentityFile ~/.ssh/chemicloud_office
이렇게 해두면 ssh chemicloud-{계정} 한 줄로 붙습니다. AI에게도 IP·포트·계정명을 매번 알려줄 필요가 없어집니다. 키워드 문법은 ssh_config 매뉴얼 참고.
5. 확인한다
ssh -o BatchMode=yes chemicloud-{계정} "whoami; hostname"
BatchMode=yes는 비밀번호 프롬프트 없이 실패하게 만드는 옵션입니다. AI 에이전트가 실제로 붙을 수 있는지를 사람 개입 없이 검증하는 데 이게 정확합니다.
공개키 하나를 여러 계정에 써도 되나?
됩니다. 이걸 몰라서 처음엔 계정마다 키를 따로 만들 생각이었습니다.
공개키는 이름 그대로 공개해도 되는 값이라, 같은 공개키를 6개 cPanel에 각각 Import + Authorize 하면 그대로 동작합니다. 6계정에 적용하는 데 키 생성은 1회, cPanel 작업만 6번이었습니다.
중요한 건 나누는 기준이 계정이 아니라 PC라는 점입니다.
- 사무실 PC → chemicloud_office
- 집 PC → chemicloud_home
- 개인키는 PC 사이에서 복사하지 않습니다. 클라우드 동기화 폴더든 USB든 마찬가지입니다
이렇게 나눠두면 한쪽 PC를 분실했을 때 각 cPanel에서 그 키만 Deauthorize하면 됩니다. 다른 PC는 영향받지 않습니다. 계정별로 키를 나누는 건 관리 부담만 6배가 되고 얻는 게 없습니다.
passphrase는 왜 비웠나
ssh-keygen은 개인키 파일을 암호화할 비밀번호(passphrase)를 물어봅니다. 저는 비웠고, 그게 트레이드오프라는 걸 알고 비웠습니다.
passphrase가 막아주는 것: 키 파일이 통째로 유출됐을 때(노트북 도난, 백업 유출)입니다. 파일만으로는 못 씁니다.
비운 이유: AI 에이전트는 사람 없이 명령을 실행합니다. passphrase가 걸려 있으면 ssh 실행마다 입력 프롬프트가 뜨는데, 에이전트에겐 거기 타이핑할 수단이 없습니다. 자동 확인이 통째로 불가능해집니다. 참고로 매뉴얼은 passphrase 분실 시 복구 방법이 없다고 명시합니다 — 키를 새로 만들어야 합니다.
대신 이렇게 막고 있습니다:
- 개인키는 ~/.ssh/에만 둡니다 — 클라우드 동기화 폴더 밖입니다
- PC별로 키를 분리해 사고 반경을 좁혔습니다
- 유출 시 cPanel에서 해당 키만 Deauthorize하면 즉시 차단됩니다
- 공유호스팅 계정은 애초에 sudo가 없어 권한 자체가 제한적입니다
등록하자마자 드러난 것 — 내 문서가 틀려 있었다
이게 이 작업의 가장 큰 수확이었습니다. 접속이 되니 그동안 문서로만 관리하던 값을 실측으로 검증할 수 있었고, 두 군데가 틀려 있었습니다.
ssh chemicloud-{계정} "hostname; /usr/local/bin/php -v"
| 항목 | 문서에 적혀 있던 값 | 실제 값 |
|---|---|---|
| 서버 대수 | 2대 | 3대 |
| 특정 계정의 서버 | 4번 서버 | 7번 서버 (혼자 다른 서버) |
| PHP CLI 버전 | 8.4.21 | 8.4.23 |
PHP는 호스팅사가 조용히 올린 것으로 보입니다. 2개월 전 수집한 값이었는데, 그동안 저는 그 표를 믿고 코드를 짜고 있었습니다. 버전에 민감한 코드를 쓸 때 문서를 믿으면 안 된다는 걸 이걸로 배웠습니다. 이제는 그 자리에서 php -v를 찍어 확인합니다.
AI에게 서버 접근을 주는 진짜 이득은 "배포를 대신해 준다"가 아니라 "내 문서가 현실과 어긋난 걸 잡아준다" 쪽이라고 생각하게 됐습니다.
함정 4가지
- 포트 21098로 시도하면 타임아웃됩니다. SFTP 포트와 SSH 셸 포트가 다릅니다. 셸은 1988입니다
- Authorize를 빠뜨리면 Import가 됐는데도 Permission denied가 납니다
- cPanel에 SSH Access 메뉴가 보인다고 셸이 열린 건 아닙니다. 그 메뉴는 키 관리 화면이고, 포트 개방은 호스팅사 설정입니다
- sudo는 없습니다. 소유권 변경, 서비스 재시작, 다른 계정 조회는 불가능합니다. 계정 홈 안에서만 작업합니다
자주 묻는 질문
참고한 공식 문서
- cPanel — SSH Access — Import·Authorize 절차
- ChemiCloud — How to Log in to Your Account via SSH — 포트 1988
- ChemiCloud — How to generate a SSH key
- OpenSSH — ssh-keygen(1) — 키 생성·passphrase
- OpenSSH — ssh_config(5) — Host 별칭·IdentityFile