Linux 강좌 / SSH 원격 접속과 scp·sftp 파일 전송하기

SSH는 암호화된 연결로 원격 서버에 로그인하고 명령을 실행하는 프로토콜이며, OpenSSH의 scp와 sftp로 파일도 전송할 수 있습니다. 처음 접속할 때는 서버의 호스트 키 지문을 확인하고, 키 인증이 검증되기 전에는 기존 로그인 수단을 없애지 마세요.

개인 키의 파일 모드는 파일 권한 읽기, 연결 시간 초과와 이름 확인 실패는 네트워크 진단와 함께 확인하세요. Ubuntu에서는 SSH 서비스뿐 아니라 소켓 활성화 여부도 systemctl status ssh.service ssh.socket으로 확인합니다. 두 유닛이 모두 항상 활성 상태여야 한다는 뜻은 아닙니다.

시스템 설정 실습의 기준은 Ubuntu 26.04 LTS와 Rocky Linux 9 계열의 일반 설치 VM입니다. 컨테이너·WSL·다른 릴리스에서는 서비스와 패키지 구성이 다를 수 있습니다. 가상 머신 실습 환경 만들기에서 콘솔 복구와 버전 확인을 먼저 준비하세요.

클라이언트와 서버를 구분하고 설치하기

명령을 입력하는 컴퓨터가 클라이언트이고 로그인할 리눅스가 서버입니다. 서버에는 접속 가능한 IP 주소, 실제 사용자 계정, 실행 중인 sshd와 해당 포트를 허용하는 네트워크 정책이 필요합니다. 아래 설치 명령은 각각 Ubuntu와 Rocky Linux 서버용입니다. 자신의 배포판에 해당하는 한 묶음만 실행하며, Ubuntu의 apt update는 패키지 목록을 갱신합니다.

sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo dnf install openssh-server
sudo systemctl enable --now sshd

서비스 이름은 Ubuntu의 ssh, Rocky Linux의 sshd가 일반적이지만 실제 설치 구성을 조회해 확인하세요. 방화벽·클라우드 보안 그룹·NAT 포트 전달은 별도입니다. 운영 서버에서 SSH 포트를 바꾸거나 인증을 제한할 때는 기존 접속을 열어 두고 콘솔 복구 경로를 확보합니다.

첫 접속에서 서버 신원을 확인하기

서버 관리 콘솔 등 이미 신뢰하는 경로에서 호스트 공개 키의 지문을 확인합니다. 아래 첫 명령은 서버에서, 둘째는 클라이언트에서 실행합니다. user와 server.example은 실제 계정·주소로 바꿉니다. Ed25519 호스트 키가 없거나 해당 암호 정책에서 허용되지 않으면 실제 사용하는 호스트 키를 관리자가 확인해야 합니다.

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
ssh user@server.example

클라이언트가 보여 주는 SHA256 지문과 서버에서 확인한 지문이 일치하는지 비교한 뒤 승인합니다. 기존 서버의 키가 바뀌었다는 경고가 나오면 재설치·키 교체인지 공격 가능성인지 먼저 확인하세요. 경고를 없애려고 known_hosts 전체를 삭제하거나 호스트 키 검증을 끄지 않습니다. 서버가 실제로 교체됐음이 확인된 경우에만 해당 항목을 관리합니다.

키 쌍을 만들고 공개 키만 등록하기

ssh-keygen -t ed25519 -f ~/.ssh/linux-course-key
ssh-copy-id -i ~/.ssh/linux-course-key.pub user@server.example
ssh -i ~/.ssh/linux-course-key user@server.example

첫 명령에서 기존 파일 덮어쓰기 질문이 나오면 중단하고 다른 파일명을 선택합니다. 개인 키에는 암호문구를 설정하고 클라이언트에 보관하며, .pub 공개 키만 서버에 등록합니다. ssh-copy-id가 없는 클라이언트에서는 공개 키 한 줄을 대상 계정의 ~/.ssh/authorized_keys에 관리 절차에 따라 추가합니다. 서버의 .ssh는 보통 700, authorized_keys는 600 권한으로 두고 소유자도 확인합니다.

새 터미널에서 지정한 키로 로그인되는지 먼저 확인합니다. 키 파일을 지정해도 에이전트의 다른 키나 비밀번호로 인증됐을 수 있으므로 필요하면 ssh -v -o IdentitiesOnly=yes -i ... 출력에서 실제 사용한 인증 방식을 확인하세요. 암호 정책과 FIPS 환경에서는 지원되는 키 형식을 관리 정책에 맞게 선택합니다.

scp로 단일 파일을 보내고 받아 보기

printf "SSH transfer test\n" > transfer-test.txt
scp -i ~/.ssh/linux-course-key transfer-test.txt user@server.example:~/transfer-test.txt
scp -i ~/.ssh/linux-course-key user@server.example:~/transfer-test.txt ./transfer-returned.txt
cmp transfer-test.txt transfer-returned.txt

이 예제는 클라이언트에서 실행합니다. 원격 홈의 같은 이름 파일을 덮어쓸 수 있으므로 실습용 계정을 사용하고 파일이 없는지 먼저 확인하세요. 마지막 cmp가 출력 없이 종료 상태 0이면 두 파일 내용이 같습니다. 최근 OpenSSH의 scp는 기본 전송에 SFTP를 사용하므로 예전 SCP 전용 서버와의 호환성은 서버·클라이언트 버전에 따라 확인해야 합니다.

sftp와 사용자 지정 포트 사용하기

sftp -i ~/.ssh/linux-course-key user@server.example

sftp 프롬프트 안에서 아래 명령을 입력합니다. pwd·ls는 원격 위치, lpwd·lls는 로컬 위치를 보여 줍니다. 업로드와 다운로드의 기준 위치를 먼저 확인하면 엉뚱한 디렉터리에 파일을 저장하는 일을 줄일 수 있습니다.

pwd
lpwd
ls
put transfer-test.txt
get transfer-test.txt transfer-sftp.txt
bye

포트가 2222라면 ssh는 -p 2222, scp와 sftp는 -P 2222를 사용합니다. 접속 거부는 포트·서비스·정책, 인증 실패는 사용자명·키·권한을 먼저 확인합니다. 상세 로그 ssh -v는 개인 키 자체를 출력하지 않지만 주소와 계정·경로 정보가 담길 수 있으므로 공유 전 가립니다. 실습 후에는 만든 파일과 불필요한 공개 키 등록만 골라 정리합니다.

공식 문서