Tailscale 홈서버 SSH 비밀번호 로그인을 키 인증으로 바꾼 기록
들어가며
집에서 Ubuntu 홈서버를 운영하면서 Tailscale을 통해 외부에서 SSH로 접속하고 있었다. 인터넷에 SSH 포트를 직접 개방하지는 않았지만, 매번 서버 계정 비밀번호를 입력하는 방식으로 로그인하고 있었다.
사실 Tailscale을 이용한다면 등록된 기기들만 접속 가능하기에 보안상 큰 문제는 아니었지만, SSH 공개키 인증을 사용하면 보안성과 편의성을 동시에 개선할 수 있다는 점이 계속 마음에 걸렸다. 이번 기회에 SSH 공개키 인증으로 전환하고, macOS Keychain과 연동하여 ssh home 한 줄로 접속할 수 있도록 설정했다.
이 글은 실제 설정 과정과 시행착오를 기록한 것이다.
기존 환경
MacBook Air
↓
Tailscale
↓
Ubuntu Home Server
↓
SSH 비밀번호 인증접속은 다음과 같이 하고 있었다.
ssh name@adress접속할 때마다 서버 계정 비밀번호를 입력해야 했다.
SSH 키 생성 또는 확인
먼저 접속을 시도하는 사용자의 컴퓨터(본인의 경우 맥)에서 ssh 키가 있는지 확인해야한다.
맥에서 다음의 명령어를 통해 확인할 수 있다.
ls ~/.ssh만약 id_ed25519 나 id_ed25519.pub 등이 보인다면 이미 ssh 키가 있는 것이고, 없다면 새로 생성하면 된다.
없는 경우 다음 명령으로 키를 생성할 수 있다.
ssh-keygen -t ed25519 -a 100-t ed25519옵션은 Ed25519 방식의 키를 생성한다는 의미이다-a 100옵션은 개인키 암호화 시 사용하는 KDF 반봇 횟수를 증가시킨다는 의미이다
생성 과정에서 Enter passphrase 라는 질문이 나올텐데 이건 비밀번호 대신 사용할 비밀 문구 정도가 되겠다. 본인이 기억하기 편한 문구를 설정하는 것이 좋다.
이제 키가 있는 경우 맥에 있는 공개키를 확인하면 된다.
cat ~/.ssh/id_ed25519.pub
이 때 출력 예시는 다음과 같다
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@MacBookAir이 줄 전체를 복사해 서버의 ~/.ssh/authorized_keys 파일에 추가하면 된다. 기존 키가 있어도 새로운 줄에 추가하면 된다.
공개키를 서버에 등록하기
맥에서 키를 생성하면 ls ~/.ssh 명령을 쳤을 때 id_ed25519 파일과 id_ed25519.pub 파일이 있음을 확인할 수 있다.
이 때 공개키를 서버에 넣어둬야 한다.
위에서 설명한대로 아래의 명령어를 이용해 맥에서 공개키를 출력한다
cat ~/.ssh/id_ed25519.pub
출력 전체를 복사한 뒤, 서버에서 다음 명령어를 차례대로 입력한다
mkdir -p ~/.ssh
chmod 700 ~/.ssh
이후 vim이나 nano 등의 편집기로 텍스트를 넣으면 된다.
vim ~/.ssh/authorized_keys이미 공개키가 있던 사람은 그대로 다음 줄에 새로운 공개키를 넣으면 된다. 저장 후 다음 명령어를 이용해 권한을 설정한다.
chmod 600 ~/.ssh/authorized_keys공개키 인증 테스트
맥에서 새로운 터미널을 띄운 뒤 다음 명령을 입력한다
ssh -v user@server성공했다면 다음과 같은 로그가 중간에 뜰 것이다
Offering public key: id_ed25519
Server accepts key: id_ed25519또는
Authentication succeeded (publickey)그렇다면 ssh 키를 통해 로그인 설정이 완료된다. 이제 패스 프레이즈로 로그인 가능하다.
패스프레이즈 입력 단순화(macOS 기준)
하지만 매번 패스프레이즈 입력이 귀찮을 수 있다. 그럴 때에는
ssh-add --apple-use-keychain ~/.ssh/id_ed25519을 실행해 본인 맥의 키체인에 등록할 수 있다.
ssh home만 입력해 접속하기
지금까지 설정을 마쳤다면 ssh 키로 접속을 할 뿐 처음 접속과 크게 달라지는 것이 없다. 번거롭게 ssh name@adress 를 쳐야한다는 말이다.
하지만 자주 접속하는 서버라면 더 편하게 접속할 필요가 있다.
먼저 맥에서 SSH 설정 파일이 있는지 확인한다
ls ~/.ssh만약 config 파일이 없다면 새로 생성한다
touch ~/.ssh/config
chmod 600 ~/.ssh/config
이제 서버에서 tailscale DNS 이름을 확인해야 한다. 서버에서
tailscale status --json | jq -r '.Self.DNSName | rtrimstr(".")'를 입력해 나온 것이 DNS 이름이다.
다시 맥으로 돌아와
vim ~/.ssh/config을 입력해 파일을 열고, 다음 내용을 추가한다
Host home
HostName YOURNAME
User woosang
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
UseKeychain yes여기서 YOURNAME 부분에 아까 서버에서 확인한 이름을 넣으면 된다.
이제 맥 터미널에서 ssh home 만 입력해 바로 서버에 접속 가능하다.