윈도우 SSH 접속을 한 단어로: config와 PowerShell 함수

윈도우 PowerShell에서 홈서버 4대에 pve, infra처럼 한 단어로 접속한다. ~/.ssh/config 별칭, PowerShell 프로필 함수, 키 등록, 프로필이 안 읽힐 때와 docker 같은 이름이 겹칠 때 주의점.
윈도우 터미널에서 pve라고만 치면 Proxmox 본체에 root로 들어간다. 설정은 두 군데다. ~/.ssh/config에 별칭을 적고, PowerShell 프로필에 같은 이름의 함수를 하나씩 둔다. 매번 ssh root@긴-주소를 치던 사람이라면 10분이면 끝난다.
대상은 집 서버 4대다. Proxmox 본체, 관문 LXC, Docker VM, GPU 서버. 집 구성은 홈 네트워크 지도에 있다.
1단계: ~/.ssh/config에 별칭 적기
윈도우 10·11에는 OpenSSH 클라이언트가 기본으로 들어 있다. 설정 파일은 사용자 폴더의 .ssh\config이고, 확장자가 없다.
code $HOME\.ssh\config
Host pve
HostName pve.home.arpa
User root
Host infra
HostName infra.home.arpa
User me
Host docker
HostName docker.home.arpa
User me
Host ai
HostName ai.home.arpa
User me
주소는 예시로 바꿔 적었다(home.arpa는 집 안 전용으로 예약된 이름이다). 실제로는 집 DNS에 등록한 이름이나 IP를 쓴다. Port 22는 기본값이라 생략해도 된다.
이것만으로 ssh pve가 된다. 별칭은 scp, VS Code Remote-SSH에서도 그대로 쓰인다.
| 항목 | 뜻 |
|---|---|
Host | 내가 부를 이름 |
HostName | 실제 주소(도메인 또는 IP) |
User | 접속 계정 |
Port | 22가 아니면 적는다 |
집 DNS가 내 도메인의 모든 하위 주소를 웹 관문(리버스 프록시)으로 보내도록 해 두었다면, SSH용 이름은 기기 IP로 따로 등록해야 한다. 그러지 않으면 ssh pve가 Proxmox가 아니라 관문 서버로 붙는다.
2단계: 비밀번호 대신 키
별칭이 있어도 매번 비밀번호를 물으면 반쪽이다. 키를 한 번 만들고 서버마다 공개키를 넣는다.
ssh-keygen -t ed25519
type $HOME\.ssh\id_ed25519.pub | ssh pve "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
윈도우에는 ssh-copy-id가 없어서 두 번째 줄로 대신한다. 서버마다 한 번씩 돌리면 다음부터는 비밀번호 없이 들어간다.
3단계: PowerShell 프로필에 함수
앞의 ssh까지 빼고 pve만 치려면 PowerShell 프로필에 함수를 둔다. 프로필은 PowerShell을 열 때마다 읽는 스크립트다.
if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }
code $PROFILE
function pve { ssh pve }
function infra { ssh infra }
function docker { ssh docker }
function ai { ssh ai }
저장하고 PowerShell을 새로 열면 pve 한 단어로 들어간다. 경로는 버전마다 다르다.
| PowerShell | 프로필 경로 |
|---|---|
| Windows PowerShell 5.1 (기본 내장) | 문서\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 |
| PowerShell 7 | 문서\PowerShell\Microsoft.PowerShell_profile.ps1 |
둘을 같이 쓰면 프로필도 둘이다. $PROFILE이 지금 창의 경로를 알려 준다.
걸리는 곳 두 가지
프로필이 안 읽힌다. 새 창에 “이 시스템에서 스크립트를 실행할 수 없으므로”가 뜨면 실행 정책 때문이다. 윈도우 기본값은 스크립트를 막는다. 내 계정에만 풀어 준다.
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
이름이 기존 명령을 가린다. PowerShell은 같은 이름이면 함수를 실행 파일보다 먼저 찾는다. 그래서 PC에 Docker CLI가 깔려 있으면 docker ps가 Docker가 아니라 SSH 접속이 된다. Get-Command docker로 무엇이 잡히는지 확인하고, 겹치면 함수 이름을 dk처럼 바꾼다. 별칭(Host docker)은 SSH 안에서만 쓰이니 그대로 둬도 된다.
어디에 무엇을 적나
| 하고 싶은 것 | 설정 |
|---|---|
ssh pve로 접속 | ~/.ssh/config에 Host pve |
| 비밀번호 없이 | ssh-keygen + authorized_keys |
pve 한 단어로 | $PROFILE에 function pve { ssh pve } |
핵심은 config 파일이다. 함수는 네 글자를 줄여 줄 뿐이고, 별칭은 scp·VS Code까지 같이 짧게 만든다. 서버가 늘면 config에 네 줄을 더하고, 자주 들어가는 곳만 함수로 만든다.
참고: Microsoft: OpenSSH 클라이언트 구성, about_Profiles, about_Execution_Policies, about_Command_Precedence