서버·SSH

PuTTY 없이 Windows 터미널에서 SSH 접속하는 법

PuTTY 없이 Windows 터미널에서 SSH 접속하는 법

웹호스팅을 계약했거나 클라우드에 서버 하나를 띄우면, 안내 메일에 꼭 이런 문구가 붙어 있습니다. “SSH로 접속하세요. IP는 xxx.xxx.xxx.xxx, 포트는 22입니다.” 그런데 정작 윈도우를 쓰는 사람 입장에서는 여기서 한 번 멈추게 됩니다. 검색하면 죄다 PuTTY를 받으라는 글이고, 어떤 글은 그냥 터미널에서 되는 것처럼 써 놨습니다.

SSH는 쉽게 말해 남의 컴퓨터에 문자로 로그인해서 명령을 치는 통로입니다. 원격 데스크톱처럼 화면을 보여주는 게 아니라, 검은 창에 글자만 오갑니다. 대신 가볍고 빠릅니다. 그리고 결론부터 말하면, 요즘 윈도우 10·11은 이 SSH 클라이언트를 이미 갖고 있습니다. PuTTY를 따로 설치할 이유가 거의 없어졌습니다.

한눈에 · OpenSSH 클라이언트 설치 확인 → ssh 사용자@주소 한 줄로 접속 → 호스트 키 yes → 프롬프트 바뀌면 성공 → 에러 나면 메시지별 대처 → config로 편하게

요즘 윈도우는 PuTTY 없이도 SSH가 됩니다

예전에는 사정이 달랐습니다. 윈도우에는 SSH 클라이언트가 아예 없었고, 그래서 PuTTY가 사실상 표준이었습니다. 지금은 OpenSSH 클라이언트가 윈도우 기본 기능(선택적 기능)으로 들어가 있습니다. 설치돼 있으면 PowerShell이든 cmd든 ssh 명령을 바로 칠 수 있습니다.

여기에 Windows Terminal을 얹으면 환경이 한 단계 더 좋아집니다. Windows Terminal은 탭을 여러 개 열 수 있고, 복사·붙여넣기가 자연스럽고, 폰트를 바꿔서 한글 깨짐을 잡기 쉬운 터미널 앱입니다. 맥이나 리눅스에서 터미널 쓰던 것과 체감이 거의 같아집니다.

PuTTY와 비교하면 차이가 분명합니다. PuTTY는 접속할 때마다 설정 창에서 호스트, 포트, 키 파일을 클릭으로 채웁니다. OpenSSH는 명령 한 줄입니다. 그리고 키 파일 문제가 없습니다. PuTTY는 .pem 같은 일반 OpenSSH 키를 못 읽어서 PuTTYgen으로 .ppk로 변환해야 하는데, 이 변환 단계가 통째로 사라집니다.

항목PuTTY윈도우 기본 OpenSSH
설치별도 다운로드윈도우에 포함(선택적 기능)
접속 방식설정 창에 입력ssh user@host 한 줄
키 파일.ppk 변환 필요.pem 그대로 사용
설정 재사용세션 저장.ssh/config 파일

이 글의 목표는 단순합니다. ssh 사용자명@서버주소 한 줄을 치고, 프롬프트가 서버 것으로 바뀌는 지점까지 가는 겁니다.

시작 전 확인할 것: OpenSSH 클라이언트와 Windows Terminal

“기본으로 된다”고 했으니 정말 되는지부터 봐야겠죠. 확인 방법은 허무할 정도로 간단합니다. 시작 메뉴에서 PowerShell을 열고 ssh만 치고 엔터를 누릅니다.

ssh

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy]... 로 시작하는 사용법이 주르륵 나오면 설치돼 있는 겁니다. 이대로 다음 섹션으로 넘어가면 됩니다.

ssh 명령이 없다고 나올 때

반대로 이런 메시지가 나오는 경우가 있습니다.

'ssh'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램 또는
배치 파일이 아닙니다.

이건 OpenSSH 클라이언트가 꺼져 있다는 뜻입니다. 상태를 정확히 보려면 PowerShell에서 이렇게 확인합니다.

Get-WindowsCapability -Online -Name OpenSSH.Client*

출력의 State 항목이 Installed면 설치됨, NotPresent면 미설치입니다. 미설치라면 PowerShell을 반드시 관리자 권한으로 다시 열어서 아래를 실행합니다.

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

물결표가 네 개인 게 오타처럼 보이지만 정상입니다. 설치가 끝나면 Online : True, RestartNeeded : False 같은 결과가 나옵니다. 그 뒤 PowerShell 창을 닫고 새로 열어야 ssh가 인식됩니다. 관리자 권한 없이 실행하면 접근이 거부됐다는 에러가 나니, 이 경우엔 권한부터 확인하세요.

Windows Terminal 설치와 기본 셸 선택

Windows Terminal은 필수가 아닙니다. 없어도 PowerShell 창에서 SSH는 됩니다. 다만 서버를 두세 대 이상 만지기 시작하면 탭이 아쉬워집니다. Microsoft Store에서 “Windows Terminal”로 검색해 설치하면 됩니다. 윈도우 11에는 기본으로 들어 있습니다.

여기서 용어를 한 번 정리하고 가는 게 좋습니다. 헷갈리는 사람이 정말 많습니다.

이름정체비유
Windows Terminal창을 띄우는 앱껍데기(창틀)
PowerShell명령을 해석하는 셸그 안에서 도는 프로그램
cmd옛날 명령 프롬프트 셸마찬가지로 안에서 도는 것

즉 Windows Terminal 안에서 PowerShell을 띄우는 구조입니다. SSH 자체는 어느 쪽에서 쳐도 똑같이 동작합니다.

마지막으로 접속에 필요한 정보 네 가지를 손에 쥐고 계셔야 합니다. 서버 IP 또는 도메인, 사용자 계정명, 포트 번호(보통 22), 그리고 비밀번호나 키 파일입니다. 호스팅 업체 가입 메일이나 클라우드 콘솔에 다 적혀 있습니다.

실제로 접속해 보기: 첫 연결부터 로그아웃까지

준비물이 다 모였으면 이제 정말 한 줄입니다. 사용자명이 ubuntu, 서버 주소가 192.168.0.10이라면 이렇게 칩니다.

ssh ubuntu@192.168.0.10

도메인이 있으면 IP 자리에 도메인을 넣으면 됩니다. ssh ubuntu@example.com 형태입니다.

첫 SSH 접속
첫 SSH 접속

엔터를 누르면 처음 접속하는 서버라면 이런 메시지가 뜹니다.

The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established.
ED25519 key fingerprint is SHA256:aB3dEf...생략...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

겁먹을 메시지가 아닙니다. “이 서버는 처음 보는데, 정말 네가 접속하려던 그 서버가 맞느냐”고 묻는 겁니다. 중간에서 누가 가로채는 상황을 막으려는 장치입니다. 보안이 중요한 서버라면 콘솔에서 서버의 지문(fingerprint)을 미리 확인해 두고 비교하는 게 원칙이고, 개인 테스트 서버라면 보통 그냥 진행합니다. yes를 전부 입력하고 엔터를 누르세요. y 한 글자는 받지 않습니다.

이렇게 승인한 서버 정보는 C:\Users\사용자\.ssh\known_hosts 파일에 기록됩니다. 다음부터는 이 질문이 안 나옵니다.

그 다음 비밀번호를 묻습니다.

ubuntu@192.168.0.10's password:

여기서 타자를 쳐도 화면에 아무것도 안 찍힙니다. 별표조차 안 나옵니다. 고장이 아니라 원래 그런 동작입니다. 그냥 끝까지 치고 엔터를 누르면 됩니다. 이걸 몰라서 계속 다시 치다가 실패하는 경우가 흔합니다.

접속됐는지 어떻게 아는가

프롬프트가 바뀌면 성공입니다. PS C:\Users\사용자> 였던 게 ubuntu@myserver:~$ 처럼 바뀝니다. 확실하게 확인하고 싶으면 두 명령을 쳐 보세요.

whoami
hostname

whoami는 현재 로그인한 계정명을, hostname은 지금 붙어 있는 서버 이름을 보여줍니다. 여기 내 PC 이름이 아니라 서버 이름이 나오면 확실히 서버 안입니다.

나올 때는 exit을 치거나 Ctrl + D를 누릅니다.

exit

logout 또는 Connection to 192.168.0.10 closed. 가 찍히고 프롬프트가 다시 PS C:\Users\사용자> 로 돌아오면 정상 종료된 겁니다.

기본 포트가 아닌 서버에 접속하기

보안상 SSH 포트를 22가 아닌 다른 번호로 바꿔 둔 서버가 많습니다. 이때는 -p 옵션을 씁니다.

ssh -p 2222 ubuntu@192.168.0.10

-p는 사용자@주소 앞에 옵니다. 뒤에 붙이면 인식이 안 됩니다. 참고로 대문자 -P는 scp에서 쓰는 것이라 ssh에서는 통하지 않습니다. 여기서 자주 헷갈립니다.

키 파일(.pem)로 접속할 때 명령 형태

AWS EC2 같은 클라우드는 비밀번호 대신 키 파일을 줍니다. 다운로드한 .pem 파일 경로를 -i 옵션으로 지정합니다.

ssh -i C:\Users\사용자\.ssh\key.pem ubuntu@서버주소

경로에 공백이 들어가면 따옴표로 감싸세요. ssh -i "C:\Users\hong gildong\.ssh\key.pem" ubuntu@서버주소 처럼요. 이 명령에서 권한 관련 경고가 뜨는 경우가 아주 흔한데, 바로 다음 섹션에서 다룹니다.

여기서 자주 막힙니다: 에러 메시지별 대처

솔직히 첫 접속이 한 번에 되는 경우가 오히려 드뭅니다. 실제로 자주 마주치는 메시지를 원문 그대로 모았습니다. 본인이 본 메시지를 찾아서 해당 항목만 보시면 됩니다.

refused와 timed out 구분표

가장 헷갈리는 두 가지부터 정리합니다. 둘 다 “연결 안 됨”이지만 원인이 완전히 다릅니다.

ssh: connect to host 192.168.0.10 port 22: Connection refused
ssh: connect to host 192.168.0.10 port 22: Connection timed out
구분Connection refusedConnection timed out
뜻서버가 “그 포트 안 열었다”고 즉시 거절아무 응답이 없어 기다리다 포기
반응 속도거의 즉시수십 초 뒤
주 원인sshd 미실행, 포트 번호 다름방화벽·보안그룹 차단, IP 오타, 서버 정지
확인할 것서버에서 systemctl status sshd, 실제 포트 번호클라우드 보안그룹 22번 인바운드, 서버 전원 상태
체감서버까지는 도달함서버까지 도달도 못 함

즉시 거절되면 서버는 살아 있는 것이고, 한참 기다리다 실패하면 중간에서 막힌 것이라고 기억하면 편합니다. 회사나 학교 네트워크에서 22번 아웃바운드를 막아 둔 경우도 timed out으로 나타납니다. 이때는 휴대폰 테더링으로 붙어 보면 원인이 네트워크인지 서버인지 금방 갈립니다.

이름을 못 찾는 경우

ssh: Could not resolve hostname exmaple.com: No such host is known.

도메인을 IP로 바꾸는 데 실패한 겁니다. 십중팔구 오타입니다. 위 예시도 example을 exmaple로 썼습니다. 오타가 아니라면 도메인 DNS 설정이 아직 안 붙었거나, PC의 DNS 문제입니다. nslookup 도메인 을 쳐서 IP가 나오는지 먼저 보세요.

윈도우에서 키 파일 권한 고치기

.pem 파일로 접속할 때 거의 반드시 한 번은 만나는 경고입니다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\사용자\\.ssh\\key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

개인 키 파일을 다른 사용자도 읽을 수 있게 돼 있으니 무시하겠다는 뜻입니다. 윈도우는 리눅스처럼 chmod 600이 없어서 icacls로 처리합니다. 키 파일이 있는 폴더에서 PowerShell 또는 cmd를 열고 실행하세요.

icacls key.pem /inheritance:r /grant:r "%USERNAME%":R

/inheritance:r 은 상위 폴더에서 물려받은 권한을 전부 끊는 것이고, /grant:r "%USERNAME%":R 은 내 계정에만 읽기 권한을 주는 것입니다. 처리한 파일: key.pem 이라고 나오면 성공입니다. PowerShell에서 %USERNAME% 이 안 풀리면 $env:USERNAME 으로 바꾸거나 계정명을 직접 적으세요.

GUI로 하려면 파일 우클릭 → 속성 → 보안 → 고급 → 상속 사용 안 함 → 본인 계정만 남기고 나머지 삭제입니다. 결과는 같습니다.

pem 키 접속이 막혔을 때 순서
pem 키 접속이 막혔을 때 순서

서버를 재설치했더니 접속이 막힐 때

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

이전에 기록해 둔 서버 지문과 지금 응답하는 지문이 다르다는 경고입니다. 진짜 공격일 수도 있지만, 현실에서는 서버를 재설치했거나 인스턴스를 새로 만들어 같은 IP를 다시 받은 경우가 대부분입니다.

원인을 알고 있다면 기록을 지우면 됩니다. C:\Users\사용자\.ssh\known_hosts 파일을 메모장으로 열고, 해당 IP나 도메인으로 시작하는 줄을 통째로 지우고 저장하세요. 명령으로 지우려면 이렇게 합니다.

ssh-keygen -R 192.168.0.10

그리고 다시 접속하면 처음처럼 yes 질문이 나옵니다. 서버를 건드린 기억이 전혀 없는데 이 경고가 뜬다면 지우지 말고 서버 상태부터 확인하세요.

한글이 깨질 때

접속은 됐는데 한글 파일명이 ??? 나 네모로 나오는 경우입니다. 두 군데를 봅니다. 터미널 쪽은 Windows Terminal 설정에서 폰트를 D2Coding이나 Cascadia Mono 계열로 바꿉니다. 서버 쪽은 locale 을 쳐서 LANG=en_US.UTF-8 이나 ko_KR.UTF-8 로 잡혀 있는지 봅니다. LANG=POSIX 나 빈 값이면 깨지기 쉽습니다.

Permission denied (publickey)

키를 지정했는데도 계속 거부당하는 경우입니다. 이건 원인이 정말 많습니다. 키가 짝이 안 맞거나, 계정명이 틀렸거나(우분투는 ubuntu, 아마존 리눅스는 ec2-user), 서버의 authorized_keys 권한이 틀렸거나 하는 식입니다. 하나씩 짚어야 해서 Permission denied (publickey) 원인별 진단 순서 정리 쪽을 따라가시는 게 빠릅니다.

매번 긴 명령 치기 귀찮다면 다음 단계

접속이 되기 시작하면 바로 다음 불편이 옵니다. ssh -p 2222 -i C:\Users\...\key.pem ubuntu@13.125.xxx.xxx 를 매번 치는 건 못 할 짓입니다. 방향만 짚어 두겠습니다.

가장 효과가 큰 건 SSH config 파일입니다. 윈도우에서도 위치와 문법이 리눅스·맥과 똑같습니다. %USERPROFILE%\.ssh\config 에 텍스트 파일로 만들면 됩니다(확장자 없음).

Host myserver
    HostName 13.125.xxx.xxx
    User ubuntu
    Port 2222
    IdentityFile C:\Users\사용자\.ssh\key.pem

이렇게 저장해 두면 ssh myserver 다섯 글자로 위 명령 전체가 대체됩니다. 설정 항목별 의미와 여러 대를 관리하는 방법은 SSH config 파일로 서버 별칭 등록하기, ssh 서버이름 한 줄로 접속하는 설정에 정리해 뒀습니다.

비밀번호로 접속 중이라면 키 인증으로 넘어가는 것도 권합니다. 매번 비밀번호를 안 쳐도 되고, 무차별 대입 시도에도 훨씬 안전합니다. 그리고 접속해서 작업하다 보면 몇 분 가만히 있었다고 세션이 툭 끊기는 일이 생기는데, 이건 SSH 접속이 자꾸 끊길 때, timeout 설정으로 잡는 법에서 다룹니다.

Windows Terminal을 쓴다면 프로필 등록도 편합니다. 설정 → 새 프로필 추가 → 명령줄에 ssh myserver 를 넣어 두면, 탭 드롭다운에서 서버 이름을 골라 바로 접속됩니다. 서버가 여러 대일 때 특히 좋습니다.

파일 전송도 같은 클라이언트로 됩니다. 별도 FTP 프로그램 없이 scp 를 쓰면 됩니다.

scp -P 2222 C:\work\index.html ubuntu@서버주소:/var/www/html/

scp는 포트 옵션이 대문자 -P 라는 점만 조심하면 됩니다.

다음에 할 일 체크리스트

  • [ ] PowerShell에서 ssh 를 쳐서 usage가 나오는지 확인했다
  • [ ] 안 나오면 Get-WindowsCapability -Online -Name OpenSSH.Client* 로 상태를 보고 Add-WindowsCapability 로 설치했다
  • [ ] 서버 IP, 계정명, 포트, 비밀번호(또는 키 파일) 네 가지를 손에 쥐었다
  • [ ] ssh 사용자명@서버주소 로 접속해 호스트 키 질문에 yes 를 입력했다
  • [ ] whoami 와 hostname 으로 서버 안에 들어왔음을 확인했다
  • [ ] exit 또는 Ctrl+D 로 나와 프롬프트가 PS C:\Users\... 로 돌아오는 걸 봤다
  • [ ] 에러가 났다면 메시지 원문을 그대로 읽고 refused / timed out / resolve 중 어느 쪽인지 구분했다
  • [ ] .pem 키를 쓴다면 icacls 로 권한을 정리해 뒀다
  • [ ] %USERPROFILE%\.ssh\config 에 자주 쓰는 서버를 별칭으로 등록했다
  • [ ] 비밀번호 인증을 쓰고 있다면 키 인증 전환을 다음 과제로 잡아 뒀다

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다