🔑
SSH(시큐어 셸)란
원격 서버에 안전하게 접속해 명령을 실행할 수 있게 해주는 암호화 프로토콜로, TCP 22번 포트를 기본으로 사용합니다.
SSH(Secure Shell)는 클라이언트와 서버 사이의 통신 구간 전체를 암호화해, 중간에서 누군가 트래픽을 가로채더라도 내용을 알아볼 수 없게 만들어주는 프로토콜입니다. 리눅스·유닉스 서버 관리는 물론, 클라우드 인스턴스 접속, 개발자의 원격 작업 등 서버를 다루는 거의 모든 상황에서 표준처럼 쓰이고 있습니다.
🚫
왜 텔넷 대신 SSH를 쓰는가
SSH 이전에 널리 쓰이던 텔넷(Telnet)은 로그인 아이디와 비밀번호를 포함한 모든 데이터를 암호화 없이 그대로 전송해, 지금은 원격 관리 용도로 거의 쓰이지 않습니다.
텔넷으로 서버에 접속하면 같은 네트워크 구간에 있는 누군가가 패킷만 들여다봐도 로그인 정보와 명령어 내용이 그대로 노출될 수 있습니다. SSH는 이런 문제를 해결하기 위해 등장했고, 접속 초반에 암호화 키를 안전하게 교환하는 절차를 거친 뒤 이후의 모든 통신을 암호화하기 때문에 지금은 원격 서버 관리의 기본값으로 자리 잡았습니다.
🗝️
비밀번호 인증과 공개키 인증
아이디·비밀번호로 로그인하는 방식 외에, 개인키는 내 컴퓨터에만 두고 공개키만 서버에 등록해 로그인하는 공개키 인증 방식이 더 안전한 방법으로 권장됩니다.
공개키 인증은 한 쌍의 키(개인키·공개키)를 미리 만들어, 공개키는 접속하려는 서버의 authorized_keys 파일에 등록해두고 개인키는 내 컴퓨터 밖으로 절대 유출하지 않는 방식입니다. 접속 시 서버가 공개키로 암호화한 값을 보내면 개인키를 가진 쪽만 이를 풀 수 있다는 사실로 신원을 증명하기 때문에, 비밀번호 무작위 대입 공격에 노출될 위험이 크게 줄어듭니다. 이 때문에 서버 운영자들은 비밀번호 로그인을 아예 비활성화하고 공개키 인증만 허용하는 경우가 많습니다.
🛠️
SSH로 할 수 있는 일
원격 명령 실행뿐 아니라 SCP·SFTP를 이용한 파일 전송, 포트 포워딩(터널링), 깃(Git) 저장소 접근 등 다양한 용도로 활용됩니다.
SSH는 단순히 로그인해서 셸 명령을 실행하는 것 이상의 기능을 제공합니다. 같은 암호화 연결 위에서 파일을 주고받는 SCP·SFTP, 원격지의 특정 포트를 내 로컬 포트로 안전하게 연결해주는 포트 포워딩, 그리고 SSH 키 인증을 그대로 활용하는 깃 원격 저장소 접근 등이 모두 SSH 프로토콜 위에서 동작합니다.
🔐
SSH 키 관리 시 주의할 점
개인키에는 반드시 별도의 패스프레이즈를 설정하고, 접속하는 서버의 호스트 키 지문을 처음 확인할 때는 신뢰할 수 있는 경로로 검증하는 습관이 필요합니다.
개인키 파일 자체가 유출되면 패스프레이즈가 없는 키는 곧바로 도용될 수 있으므로, 키 생성 시 패스프레이즈를 함께 설정해 이중 방어막을 마련하는 것이 좋습니다. 또한 처음 접속하는 서버의 호스트 키 지문이 낯설게 표시될 때 무심코 수락하지 않는 것도 중요한데, 이는 중간자 공격으로 가짜 서버에 연결되고 있는 것은 아닌지 확인하는 최소한의 안전장치이기 때문입니다. 더 이상 사용하지 않거나 유출이 의심되는 키는 서버의 authorized_keys에서 즉시 제거해야 합니다.
🚇
SSH 포트 포워딩(터널링)의 개념
외부에 직접 노출하기 애매한 내부 서비스(DB 관리 화면 등)를, SSH로 접속한 서버를 경유해 내 로컬 포트로 안전하게 끌어와 접근하는 기법입니다.
예를 들어 사내망 안에서만 접근 가능한 데이터베이스 관리 도구가 있다면, SSH로 그 사내망에 접속 가능한 서버에 로그인한 뒤 로컬 포트 포워딩을 설정해 마치 내 컴퓨터에서 직접 그 서비스에 접속하는 것처럼 사용할 수 있습니다. 이 모든 트래픽이 이미 암호화된 SSH 연결 안을 지나가기 때문에 별도의 VPN 없이도 특정 서비스 하나만 안전하게 우회 접근할 수 있는 실용적인 방법으로 널리 쓰입니다.