운영 체제

SSH 명령어로 Linux 서버 관리: 웹마스터를 위한 필수 기본 명령어

  • 15 읽는 데 몇 분 소요
  • Hostragons 팀
SSH 명령어로 Linux 서버 관리: 웹마스터를 위한 필수 기본 명령어

SSH 명령어로 Linux 서버 관리는 웹마스터가 원격 Linux 서버에 안전하게 접속해 파일, 서비스, 사용자, 로그, 보안, 성능 등을 터미널에서 직접 제어하는 작업을 말합니다. 기본적으로 ssh 사용자@서버-IP 명령으로 접속한 뒤 ls, cd, pwd, cp, mv, rm, nano, systemctl, journalctl, top, df, du, chmod, chown, tar, scp, rsync 같은 명령어를 활용해 사이트를 배포하고, 오류를 분석하며, 서비스를 재시작하고, 백업을 관리합니다. 이 가이드는 호스팅·VPS·Dedicated 서버를 운영하는 웹마스터가 실무에서 가장 자주 쓰는 명령어를 실제 예시와 함께 정리했습니다.

제어판만으로 사이트를 운영하는 것만으로는 부족한 순간이 있습니다. 트래픽이 급증하거나, 특수 설정이 필요하거나, 에러 로그를 자세히 봐야 할 때, 혹은 긴급 조치가 필요할 때 SSH를 다룰 줄 알면 큰 차이가 납니다. 예를 들어 WordPress에서 500 오류가 발생했을 때 패널이 느리게 열리길 기다리지 않고, 몇 가지 명령으로 디스크 사용량, PHP-FPM 상태, Nginx·Apache 로그, 최근 변경된 파일을 빠르게 확인할 수 있습니다. 이는 다운타임을 줄이고 SEO에도 긍정적인 영향을 줍니다. 서버를 아직 선택하지 않았다면 VPS 서버와 웹 호스팅 비교를 먼저 해보세요.

SSH란 무엇이며 웹마스터에게 왜 중요한가?

SSH는 Secure Shell의 약자로, 원격 서버에 암호화된 연결을 제공하는 안전한 프로토콜입니다. FTP가 단순 파일 전송에 그친다면 SSH는 서버의 명령줄 전체를 제어할 수 있게 해줍니다. 웹 루트 디렉터리로 이동하고, 권한을 수정하고, 서비스를 재시작하고, 방화벽을 확인하고, 데이터베이스 백업을 만들고, 로그를 실시간으로 볼 수 있습니다.

웹마스터 입장에서 SSH를 익히면 세 가지 큰 장점이 있습니다. 첫째, 속도입니다. 큰 파일을 패널로 다운로드하는 대신 서버 안에서 압축하면 훨씬 빠릅니다. 둘째, 가시성입니다. 로그, CPU·RAM 사용량, 디스크 상태를 바로 확인할 수 있습니다. 셋째, 제어권입니다. 권한 오류, 서비스 중단, 잘못된 설정 등을 기다리지 않고 바로 해결할 수 있습니다. 특히 VPS, 클라우드, Dedicated 서버에서는 SSH가 거의 필수 기술입니다.

SSH 접속 전에 알아두어야 할 것들

SSH 접속에는 보통 서버 IP(또는 도메인), 사용자 이름, 인증 방식이 필요합니다. 기본 포트는 대부분 22번이지만, 보안을 위해 다른 포트를 쓰는 경우도 많습니다. 접속 명령은 ssh 사용자@서버-IP이며, 포트가 다르면 ssh -p 2222 사용자@서버-IP로 연결합니다.

처음 접속하면 서버의 지문(fingerprint)을 확인하라는 메시지가 나옵니다. 올바른 서버에 접속했는지 확인하는 절차이므로 Yes를 입력합니다. 이후 서버 정보는 컴퓨터의 known_hosts 파일에 저장됩니다. 나중에 서버가 변경되거나 IP가 바뀌면 보안 경고가 뜰 수 있으니, 반드시 올바른 서버인지 확인하세요.

비밀번호 접속과 SSH 키의 차이

비밀번호로 로그인하는 방식은 간단하지만 무차별 대입 공격에 취약합니다. SSH 키 방식은 로컬에 개인키, 서버에 공개키를 두는 방식으로 훨씬 안전합니다. 키를 만들려면 ssh-keygen -t ed25519 명령을 사용하고, 공개키를 서버에 복사할 때는 ssh-copy-id 사용자@서버-IP를 사용합니다. 키 설정이 끝나면 비밀번호 로그인을 비활성화하면 보안이 크게 강화됩니다.

비밀번호 접속과 SSH 키의 차이
방식장점위험성추천 상황
비밀번호 SSH설정이 빠르다약한 비밀번호일 경우 공격 위험이 높음임시 접속 및 초기 설정
SSH 키더 안전하고 자동화에 적합개인키가 유출되면 위험상시 서버 관리
포트 변경자동 스캔을 줄임단독으로는 충분하지 않음키 + 방화벽과 함께 사용
Root 로그인 차단권한 남용 방지잘못된 sudo 설정 시 접근이 어려워질 수 있음운영 서버

기본 탐색 및 파일 목록 보기 명령어

Linux 터미널에서 가장 먼저 익혀야 할 명령은 현재 위치 확인, 디렉터리 이동, 파일 목록 보기입니다. pwd는 현재 경로를 보여주고, cd /var/www/html로 웹 루트로 이동할 수 있습니다. cd ..는 상위 폴더로, cd는 사용자 홈으로 돌아갑니다. ls는 파일을 나열하고, ls -la는 숨김 파일까지 포함해 권한·소유자·크기·수정일을 보여줍니다.

웹마스터는 특히 .htaccess, wp-config.php, robots.txt, sitemap.xml, index.php 같은 파일을 자주 확인합니다. ls -lah는 파일 크기를 읽기 쉽게 1.0M 형태로 표시합니다. 최근 수정된 파일을 위로 보고 싶다면 ls -lt를 사용하세요. 해킹 의심 파일이나 새로 설치한 플러그인을 찾을 때 유용합니다.

실전 예시: 웹 루트 디렉터리 확인하기

사이트 파일은 보통 /var/www, /home/사용자/public_html, /usr/share/nginx/html 경로에 있습니다. pwd로 현재 위치를 확인하고, cd /var/www/사이트명으로 이동한 뒤 ls -lah로 파일을 보고, du -sh .로 전체 용량을 확인하는 흐름이 일반적입니다. 여러 사이트를 운영한다면 각 사이트를 별도 사용자와 별도 디렉터리로 분리하는 것이 보안과 관리 측면에서 좋습니다. 도메인 관련 작업은 도메인 쿼리, 사이트 개설은 호스팅 설치 가이드를 함께 참고하세요.

파일·폴더 작업: 생성, 복사, 이동, 삭제

파일을 만들 때는 touch 파일.txt, 폴더를 만들 때는 mkdir 폴더명 명령을 사용합니다. 중첩된 폴더를 한 번에 만들려면 mkdir -p 백업/2026/01처럼 -p 옵션을 추가하세요. 파일 복사는 cp 원본 대상, 폴더 복사는 cp -r 원본폴더 대상폴더입니다. 이동이나 이름 변경은 mv 기존이름 새이름으로 합니다.

삭제 명령은 특히 주의해야 합니다. rm 파일.txt는 단일 파일을 지우고, rm -r 폴더명은 폴더 전체를 지웁니다. rm -rf는 확인 없이 강제로 삭제하므로 잘못된 위치에서 실행하면 큰 피해를 입을 수 있습니다. 운영 서버에서는 반드시 pwd와 ls로 위치와 대상을 확인한 후 실행하세요. 중요한 작업 전에는 tar나 rsync로 간단히 백업을 만들어 두는 습관이 필요합니다.

안전한 삭제 습관

초보자라면 바로 삭제하기보다 먼저 의심 파일을 격리 폴더로 옮기는 방법을 추천합니다. mkdir /root/격리 후 mv 의심파일.php /root/격리/처럼 이동하면 삭제 전에 확인할 수 있습니다. 사이트가 정상이라면 그 후에 영구 삭제하세요. 악성 파일 제거, 플러그인 삭제, 테마 변경 시 특히 유용합니다.

파일 내용 보기 및 편집 명령어

파일 전체를 보려면 cat 파일.txt, 페이지 단위로 보려면 less 파일.txt를 사용합니다. 큰 로그 파일은 cat보다 less가 편합니다. 앞부분은 head, 뒷부분은 tail로 확인하고, 실시간 로그 추적은 tail -f /var/log/nginx/error.log가 가장 유용합니다.

파일을 편집할 때는 nano, vim, micro 같은 에디터를 씁니다. 초보자에게는 nano가 가장 쉽습니다. nano .htaccess로 열고, 수정 후 Ctrl+O로 저장, Ctrl+X로 종료합니다. PHP 설정, Nginx server block, Apache virtual host, robots.txt를 편집할 때는 작은 실수가 사이트 전체에 영향을 줄 수 있으므로, 변경 전 cp 파일 파일.bak으로 백업을 남겨두는 것이 좋습니다.

권한 및 소유자 관리: chmod와 chown

Linux 서버에서 파일 권한은 사이트 동작과 보안에 매우 중요합니다. chmod는 권한을, chown은 소유자를 변경합니다. 일반적으로 폴더는 755, 파일은 644를 많이 사용합니다. chmod 644 wp-config.php처럼 개별 파일에 적용하고, 전체 폴더에 적용할 때는 find . -type d -exec chmod 755 {} \; 형태를 활용합니다.

소유자는 chown -R www-data:www-data /var/www/사이트명처럼 설정하며, 배포판에 따라 www-data 대신 nginx나 apache를 사용할 수도 있습니다. cPanel 환경에서는 각 사이트마다 별도 사용자가 있을 수 있습니다. 잘못된 소유자는 403 오류나 업로드 문제를 일으킬 수 있습니다. 777처럼 과도하게 열린 권한은 단기적으로 문제를 해결하는 것처럼 보이지만 보안 취약점을 만듭니다.

디스크·RAM·CPU 확인 명령어

성능 문제가 발생하면 가장 먼저 자원 사용량을 확인해야 합니다. df -h는 디스크 파티션별 사용률을 보여줍니다. 루트 파티션이 100% 차면 로그 기록이 멈추고 데이터베이스가 잠길 수 있으며, 결국 500 오류로 이어집니다. du -sh *는 현재 폴더 내 폴더별 용량을 요약해 보여줍니다. 큰 로그나 캐시 파일을 찾을 때는 du -ah /var/www | sort -h | tail을 사용하세요.

RAM과 CPU는 top 또는 htop으로 확인합니다. htop이 없으면 apt install htop이나 dnf install htop으로 설치할 수 있습니다. free -m은 메모리와 스왑 상태를, uptime은 시스템 가동 시간과 load average를 보여줍니다. 단일 코어 서버에서 load가 1을 장시간 넘거나, 멀티 코어에서 코어 수를 초과하면 성능 병목이 발생할 수 있습니다. 트래픽이 꾸준히 증가한다면 더 강력한 플랜이나 최적화를 고려해야 하며, 이때 리눅스 VPS기업 호스팅을 비교해보세요.

서비스 관리: systemctl로 Apache, Nginx, PHP, MySQL 제어

최신 Linux 배포판에서는 systemctl로 서비스를 관리합니다. systemctl status nginx로 상태를 보고, systemctl restart nginx로 재시작하며, systemctl reload nginx로 설정을 다시 읽어들입니다. Apache는 apache2 또는 httpd, PHP-FPM은 php8.2-fpm, MySQL은 mysql 또는 mariadb로 서비스 이름을 확인하세요.

재시작 전에 설정 테스트를 하는 습관을 들이세요. Nginx는 nginx -t, Apache는 apachectl configtest를 사용합니다. 테스트에 실패하면 restart를 하면 사이트가 내려갈 수 있습니다. Nginx 설정에 세미콜론이 빠졌다면 nginx -t가 정확한 줄 번호를 알려주므로, 먼저 수정한 뒤 reload하는 것이 안전합니다.

웹마스터를 위한 빠른 서비스 점검 체크리스트

  • 사이트가 열리지 않으면 ping 대신 서버에서 systemctl status 웹서비스를 먼저 확인하세요.
  • 502 오류가 나면 PHP-FPM 상태와 Nginx error log를 보세요.
  • 데이터베이스 연결 오류 시 systemctl status mysql과 디스크 사용량을 확인하세요.
  • 설정을 바꿨다면 restart 대신 reload를 우선 사용하세요.
  • 모든 변경 전에는 해당 파일의 .bak 복사본을 만들어 두세요.

로그 분석: 오류 원인을 몇 분 안에 찾기

로그 분석: 오류 원인을 몇 분 안에 찾기

로그 파일은 서버의 블랙박스와 같습니다. Nginx는 /var/log/nginx/access.log와 error.log, Apache는 /var/log/apache2/access.log와 error.log를 주로 사용합니다. PHP-FPM 로그는 배포판에 따라 /var/log/php8.2-fpm.log 또는 journalctl 안에 있을 수 있습니다.

journalctl -xe는 시스템 서비스 관련 최근 오류를 보여주고, journalctl -u nginx -n 100은 Nginx의 최근 100개 기록을 출력합니다. 실시간 추적은 journalctl -u php8.2-fpm -f를 사용하세요. 특정 단어를 찾을 때는 grep 500 access.log처럼 활용합니다.

SEO 관점에서도 로그 분석은 중요합니다. Googlebot이 어떤 페이지를 방문했는지, 404 오류가 집중된 URL은 어디인지, 응답이 느린 리소스는 무엇인지 access log로 파악할 수 있습니다. 기술 SEO 점검 시 SEO 호환 호스팅웹사이트 속도 최적화 콘텐츠를 함께 참고하면 좋습니다.

검색·필터링·텍스트 처리 명령어

서버에서 파일이나 텍스트를 찾을 때는 find, grep, awk, sed가 강력합니다. find /var/www -name wp-config.php로 특정 파일을 찾고, find . -type f -mtime -1로 최근 24시간 내 변경된 파일을 확인할 수 있습니다. 이는 무단 파일 변경 의심 시 매우 유용합니다. grep -R base64_decode .는 base64_decode 문자열이 포함된 파일을 찾아줍니다.

로그 분석 시 awk로 특정 컬럼을 추출하고, sort와 uniq -c로 가장 많은 요청을 보낸 IP를 집계할 수 있습니다. 이런 분석은 과도한 봇 트래픽이나 DDoS 유사 공격을 조기에 발견하는 데 도움이 됩니다.

파일 전송: scp, sftp, rsync

SSH는 명령 실행뿐 아니라 파일 전송에도 사용됩니다. scp 로컬파일 사용자@서버-IP:/대상/경로로 서버에 업로드하고, 반대로 받을 때는 scp 사용자@서버-IP:/파일경로 ./를 사용합니다. 대용량 폴더는 scp보다 rsync가 효율적입니다.

rsync -avz 원본/ 사용자@서버-IP:/대상/은 아카이브 모드에 압축까지 적용해 전송합니다. --delete 옵션은 대상에만 있고 원본에 없는 파일을 삭제하니 주의해서 사용하세요. WordPress 이전, 스테이징에서 라이브로 파일 동기화, 백업 서버 동기화에 적합합니다. SSL 설치나 HTTPS 전환 시에는 SSL 인증서 가이드를 먼저 확인하세요.

백업 및 복구를 위한 SSH 명령어

백업은 서버 관리의 보험과 같습니다. 파일 백업은 tar -czf 사이트-백업.tar.gz /var/www/사이트명으로 생성하고, tar -xzf 사이트-백업.tar.gz로 압축을 해제합니다. 대형 사이트는 웹 디렉터리 밖에 백업을 두고 가능하면 원격 저장소로 옮기는 것이 안전합니다.

데이터베이스 백업은 mysqldump -u 사용자 -p 데이터베이스명 > 백업.sql로 수행하고, 복구는 mysql -u 사용자 -p 데이터베이스명 < 백업.sql로 합니다. 대용량 DB는 작업 시간이 길어질 수 있으므로 screen이나 tmux를 사용하면 연결이 끊겨도 작업이 계속됩니다. screen -S 백업으로 세션을 만들고 Ctrl+A → D로 빠져나왔다가 screen -r 백업으로 다시 들어갈 수 있습니다.

보안을 위한 핵심 SSH 설정

SSH 보안은 서버 보안의 출발점입니다. 가장 먼저 root 직접 로그인을 차단하세요. 대신 sudo 권한이 있는 일반 사용자를 만듭니다. adduser webmaster로 사용자를 추가하고, usermod -aG sudo webmaster로 sudo 권한을 부여합니다. 이후 /etc/ssh/sshd_config에서 PermitRootLogin no와 PasswordAuthentication no를 설정합니다.

설정 변경 후에는 sshd를 테스트하고, 기존 세션을 유지한 채 새 터미널로 접속을 확인해야 합니다. 잘못 설정하면 서버에 접근하지 못할 수 있습니다. 방화벽은 ufw allow 2222/tcp와 ufw enable로 필요한 포트만 열고, 포트를 변경했다면 기존 세션을 끊기 전에 새 포트로 접속 가능한지 반드시 확인하세요.

최소 보안 점검 리스트

  • 강력한 비밀번호 또는 SSH 키를 사용하세요.
  • Root 로그인을 차단하고 sudo 권한 사용자를 만드세요.
  • 불필요한 서비스는 끄고 필요한 포트만 열어두세요.
  • 시스템 패키지는 정기적으로 업데이트: apt update && apt upgrade.
  • 로그를 꾸준히 확인하고, 의심 IP는 fail2ban으로 차단하세요.
  • 백업은 같은 서버에 한 부만 두지 마세요.

패키지 관리 및 업데이트 명령어

Ubuntu·Debian 계열은 apt, AlmaLinux·Rocky Linux 계열은 dnf 또는 yum을 사용합니다. apt update로 패키지 목록을 갱신하고, apt upgrade로 설치된 패키지를 업데이트합니다. 특정 패키지는 apt install nginx, 제거는 apt remove 패키지명으로 처리합니다. RHEL 계열은 dnf update와 dnf install을 비슷하게 사용합니다.

업데이트는 유지보수 시간대에 진행하는 것이 좋습니다. 특히 PHP, MySQL, OpenSSL, 웹서버 업데이트는 사이트 동작에 영향을 줄 수 있으므로, 먼저 백업을 하고 스테이징 환경에서 테스트한 뒤 적용하세요.

웹마스터를 위한 긴급 대응 흐름 예시

어느 날 아침 사이트가 열리지 않는 상황을 가정해 보겠습니다. 당황하지 말고 정해진 순서대로 진행하세요. 먼저 SSH로 접속한 뒤 uptime으로 서버 응답과 load 값을 확인합니다. df -h로 디스크 사용량, free -m과 top으로 메모리·CPU를 봅니다. 그 다음 systemctl status nginx로 웹서비스 상태를 확인하세요. 502 오류라면 PHP-FPM 상태를, 데이터베이스 오류라면 systemctl status mysql과 로그를 확인합니다.

이후 tail -n 100으로 최근 오류 로그를 읽고, 새로 설치한 플러그인 때문인지 ls -lt로 최근 변경 파일을 찾습니다. 필요하면 해당 폴더를 임시로 이름을 바꿔보세요. 디스크가 가득 찼다면 오래된 로그나 불필요한 백업을 확인한 후 삭제합니다. 이 과정을 따르면 대부분의 기본 장애를 5~15분 안에 원인을 좁힐 수 있습니다.

SSH 명령어를 사용할 때 흔히 하는 실수

가장 흔한 실수는 명령어를 이해하지 않고 그대로 복사해 실행하는 것입니다. 인터넷에 있는 명령이 모든 서버에 맞는 것은 아닙니다. 특히 rm -rf, chmod -R 777, chown -R, 데이터베이스 삭제 명령은 큰 위험을 초래할 수 있습니다. 두 번째는 root 사용자로 계속 작업하는 것입니다. root 권한이 필요할 때는 sudo를 사용하는 습관을 들이세요.

세 번째는 백업 없이 변경하는 것입니다. 간단한 설정 파일 하나로도 사이트가 멈출 수 있습니다. 네 번째는 로그를 확인하지 않고 서비스를 계속 재시작하는 것입니다. 재시작은 임시방편일 뿐 근본 원인을 숨길 수 있습니다. 다섯 번째는 보안 업데이트를 소홀히 하는 것입니다. 최신 버전이 아닌 PHP나 CMS는 공격 표면을 넓힙니다.

기본 SSH 명령어 요약 표

기본 SSH 명령어 요약 표
작업명령어언제 사용하나요?
접속ssh 사용자@서버-IP터미널로 서버에 접속할 때
현재 경로 확인pwd어느 폴더에 있는지 확인할 때
파일 목록ls -lah파일, 권한, 소유자, 크기를 볼 때
디스크 확인df -h디스크 사용률을 확인할 때
폴더 용량du -sh *어느 폴더가 용량을 많이 차지하는지 볼 때
서비스 상태systemctl status nginx웹서비스가 실행 중인지 확인할 때
로그 실시간 보기tail -f 오류.log실시간으로 오류를 추적할 때
파일
이 기사를 공유하세요:

Hostragons 팀

호스팅, 서버, 도메인 이름에 대한 최신 가이드를 전문가 팀과 함께 확인하세요. 프로젝트에 맞는 최적의 솔루션을 찾아드리겠습니다.

문의하기