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

윈도우 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접속 계정
Port22가 아니면 적는다

집 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