이전 글(아치리눅스 설치 과정 37 - GNOME Shell Extensions, 잠금화면 부활)에 이어...

 

이번 글의 목표 : SSH 연결 환경을 key파일 기반으로 전환하고, 스마트폰으로 아치리눅스 PC 제어를 가능케 합니다.

 

▼ GNOME 설정 - 공유 카테고리에는 "원격 로그인" 항목이 있습니다.
이것을 켜면...

▲ SSH 연결 기능이 활성화 됩니다.
(SSH 연결은 리눅스 활용의 꽃이라고 생각합니다.)

 

▲ GNOME 설정 앱 덕분에 위 스크린샷과 같은 OpenSSH 서비스 활성화 과정(터미널 창)을 안 거쳐도 돼서 좋더군요. 세상 편함.

sudo systemctl status sshd.service
sudo systemctl enable sshd.service
sudo systemctl start sshd.service

 

▼ 방화벽에서 SSH 포트도 열어줘야 하겠죠? 저는 UFW+GUFW 조합을 선호하는데요,

▲ SSH 기본 포트는 22번이니, 방화벽 규칙에 22번 포트를 추가하면 됩니다.

 

▲ 22번 포트를 다른 것으로 바꾸고 싶으면... OpenSSH 전역 설정 파일인 /etc/ssh/ssh_config 에서 Port 옵션 주석(#)을 풀고, 원하는 포트로 바꾸면 됩니다. 하지만 요즘은 유무선 공유기가 잘 나와서 공유기 포트포워딩 기능으로 포트 바꾸시죠? 그래서 활용 가치가 낮은 옵션이라고 봅니다.

 

포트를 바꾸더라도 바꾼 포트로 접속했을 때 ID/비밀번호 입력창이 노출되는 한 brute-force(무차별 대입) 공격을 무한정 막을 수는 없다고 생각해요. 그래서 저는 포트 변경 없이 ssh key pair files 생성해서 등록하려고 합니다. ssh 키파일만 외부노출 없이 관리하면 되니까 보안에는 훨씬 유리하겠지요? ID/비밀번호로 SSH 로그인하는 방식은 막을 거예요.

 

https://wiki.archlinux.org/title/SSH_keys

https://man.archlinux.org/man/ssh-keygen.1.en

https://man.archlinux.org/man/ssh_config.5

https://man.archlinux.org/man/sshd_config.5.en

https://wiki.archlinux.org/title/OpenSSH

▲ 가이드 문서는 아치위키. 믿고 갑니다.

 

▲ 아치위키 문서는 openssh 패키지를 설치했다는 가정 하에 설명한다고 고지합니다.

pacman -Qs openssh

명령어를 입력해 봤더니 설치되어 있더군요. (당연한 건가?)

 

키 쌍 : public key(공개키) / private key(개인키) 개념 잡기

SSH 키는 언제나 개인 키(private key) + 공개 키(public key) 쌍(pair 페어)으로 생성됩니다.
공개키는 연결하려는 모든 SSH 서버와 자유롭게 공유할 수 있습니다.
개인키는 본인만 사용해야 하며, 안전하게 보호해야 합니다.
어렵게 생각하실 필요 없습니다. 그림으로 받아들이면 쉬워요.

 

▼ 현관문에 설치하는 보조키 뭉치 : 공개키(Public Key) 개념입니다. 불특정 다수에게 노출되죠.

▲ 열쇠 : 개인키(Private Key) 개념입니다. 나만 가지고 있어야 되겠죠.

 

SSH 연결, 암호 인증 전환 막기

OpenSSH 서버 기본 설정은 클라이언트가 공개키 인증 실패하면 Password 인증으로 전환(fall back 폴백)하도록 되어 있습니다. 암호 인증이라 함은 리눅스 계정 비밀번호 입력을 의미하죠.

 

저는 암호 인증 전환을 막을 겁니다. 오직 개인키(Private Key)로만 SSH 외부접속 로그인 가능하도록.

 

sudo nano /etc/ssh/sshd_config

에디터로 /etc/ssh/sshd_config 파일을 엽니다.

 

▲ PasswordAuthentication no
AuthenticationMethods publickey

추가하고 저장 + 빠져나옵니다.

 

SSH 키 쌍 생성하기

ls -al ~/ | grep .ssh

/home/계정명/.ssh 디렉토리가 있는지 파악합니다. 권한 보세요. 700이죠?

 

없으면 만들고, 위 스크린 샷처럼 권한을 700으로 설정합니다.

mkdir ~/.ssh

chmod 700 ~/.ssh

 

위에서 SSH 키는 언제나 개인 키(private key) + 공개 키(public key) 쌍(pair 페어)으로 생성된다고 적었었죠?

ssh-keygen

위 명령어를 입력하고 출력되는 대화창 내용을 따르면 3072bit RSA+SHA256 규격(기본값)의 공개키/개인키 쌍이 만들어집니다. 아치위키 가이드에는 일반적으로 충분하다고 적혀 있어요. 하지만 유용한 옵션을 소개할 겸, 명령어에 옵션을 더해서 넣겠습니다.

 

ssh-keygen -t rsa -b 4096 -C "\$(whoami)@\$(uname -n)-\$(date -I)"

 

-t 옵션은 암호화 방식 정하는 겁니다. | -b 옵션은 bit수 정하는 겁니다. | -C 옵션은 코멘트(주석) 넣는 겁니다. 계정명(whoami), 컴퓨터이름(uname), 날짜(date)를 코멘트 항목으로 넣었습니다.

 

출력되는 대화창을 보시죠. 위 스크린 샷에서 초록색 밑줄친 곳들도 직접 입력해야 되는데요,

  • Enter file in which to save the key (/home/계정명/.ssh/id_rsa) => 키 쌍 파일들이 저장될 경로(디렉토리)와 파일명까지 입력합니다. 저는 /home/aaa/.ssh/arch_aaa 라고 입력했어요. /home/aaa/.ssh/ 디렉토리에 arch_aaa 이름의 파일로 저장하겠다는 뜻입니다.
  • Enter passphrase (empty for no passphrase) => 리눅스 계정 암호와 별개입니다. 키 쌍의 암호를 입력하라는 뜻입니다. 저는 "엔터" 쳐서 암호 설정 안하고 넘어갔습니다. 연결할 때마다 암호 입력하기 귀찮아서요.
  • Enter same passphrase again => 암호 확인. "엔터" 쳐서 넘어갔습니다.

 

윈도우에서 puttygen 같은 도구를 쓰는 것보다 쉽게 SSH 키 쌍을 만들 수 있죠? 박수!!

 

▲ ls 명령어로 경로를 확인해 보면 키 쌍(key pair) 파일들이 생성된 것을 확인할 수 있습니다. 확장자 없는 것이 개인키(Private Key) / .pub 확장자 붙은 것이 공개키(Public Key)입니다.

 

만약 생성된 키의 암호를 변경하고 싶다면
ssh-keygen -f /경로명/파일명 -p

이런 식으로 입력하고 새로운 암호를 정하면 됩니다.

 

▼ 공개키는 /home/계정명/.ssh/authorized_keys 경로에 복사+붙여넣기 해야 되는데요, 복사(cp)/이동(mv)/출력(cat)+저장 등 본인에게 편한 방식을 이용하면 됩니다.

cat /home/aaa/.ssh/arch_aaa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

저는 cat 명령어를 통해 출력+저장하는 방식을 썼고요, 그룹/기타 권한은 0으로 바꿔서 소유자만 사용할 수 있도록 했습니다.

 

.ssh 디렉토리에는 authorized_keys 파일을 남기고, 공개키(arch_aaa.pub)는 지워도 됩니다. 비밀스런 곳에 옮겨도 되고.

개인키(arch_aaa)는 다른 PC/스마트폰 등에 옮겨서 열쇠처럼 쓰면 됩니다.

 

OpenSSH 서비스 재시작(설정 적용)

sudo systemctl restart sshd.service

OpenSSH 서비스를 재시작하여 설정을 적용합니다.

sshd -t

명령어로 문제 사항 있는지 살펴봤는데, hostkey 정도야 뭐... 귀찮아서 넘어갔습니다.

 

개인키 옮기고 테스트

USB 메모리를 쓰든 이메일/클라우드 드라이브를 쓰든 FTP를 쓰든 본인이 편한 방법으로 Private Key를 옮깁니다. 저는 윈도우10 설치된 PC로 옮겨 봤어요.

 

▼ 요즘 윈도우에는 OpenSSH가 기본 설치되어 있으니, 명령 프롬프트 띄우고 테스트 해봤습니다.

ssh -i "키파일 경로명" 리눅스계정@리눅스IP주소 -p 포트번호

아주 높은 확률로 WARNING: UNPROTECTED PRIVATE KEY FILE! 에러가 뜰 겁니다.

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@        WARNING: UNPROTECTED PRIVATE KEY FILE!         @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'Z:\\Download\\arch_test\\arch_aaa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "Z:\\Download\\arch_test\\arch_aaa": bad permissions
aaa@192.168.168.5: Permission denied (publickey).

▲ 검은 밑줄 뜻 : 키파일 권한이 너무 열렸다. 좀 막아라!

 

SSH 개인키는 중요한 정보이기 때문에 소유자외 다른 이가 읽을수 있으면 위와 같은 에러를 만나게 됩니다.

 

리눅스에서는

chmod 600 ~/.ssh/id_rsa(키파일 이름)

이런 식으로 입력해서 소유자만 권한 주고, 그룹/기타는 00으로 바꾸어 권한을 박탈하는 식으로 해결하면 됩니다. 무척 쉽죠.

 

윈도우의 권한 설정은... 좀 어렵습니다. 그만큼 귀찮음.

탐색기에서 키파일 마우스 우클릭 - "속성"으로 들어가세요.

 

▲ "보안" 탭에서 "고급" 버튼을 누릅니다.

 

▲ 사용 권한 탭에서 "상속 사용 안 함" 버튼을 누르고,

 

▲ "상속된 사용 권한을 이 개체에 대한 명시적 사용 권한으로 변환합니다." 항목을 클릭합니다.

 

▼ 아래 스샷처럼 "다음에서 상속됨" 항목들이 "없음"으로 바뀔 것인데,

▲ 윈도우 로그인 계정만 남기고... 이외의 SYSTEM, Administrators 같은 보안 주체들은 "제거" 버튼을 눌러 전부 없앱니다. 그리고 "확인" 버튼을 눌러 빠져나오면 끝.

 

 ssh -i "키파일 경로명" 리눅스계정@리눅스IP주소 -p 포트번호

형식으로 SSH 접속 시도해보면? 연결 성공. 심지어 패스워드 없이.

sudo reboot

제어 확인에는 재부팅이 최고죠.ㅎ

 

안드로이드 스마트폰 무료 SSH 클라이언트

SSH 서버 = SSH를 제공해 주는 PC = 아치리눅스 설치된 컴퓨터.

SSH 클라이언트 = SSH 서버로 접속할 수 있는 장비 = 스마트폰.

안드로이드 스마트폰에 SSH 클라이언트 앱(무료)을 설치하면 폰으로 PC 제어를 할 수 있겠지요.

 

https://juicessh.com

▲ 저는 안드로이드용 무료 SSH Client 앱들 중에서 JuiceSSH를 추천합니다. IOS는 Termius 앱이 괜찮았고요.

https://play.google.com/store/apps/details?id=com.sonelli.juicessh 

▲ 설치하세요.

 

SSH 개인키 파일을 스마트폰으로 복사하세요.

방법은 본인에게 편한 것으로. USB로 보내든, 이메일로 보내든...

 

JuiceSSH 실행하세요.

 

▲ Manage Connections 터치 하세요.

 

▲ "계정 정보" 탭에서 우측 하단 +버튼 누르세요.

 

닉네임 : 본인이 알아보기 쉽게 정하세요.

사용자명 : 리눅스 계정(ID)를 넣으세요.

개인 키 : "설정(선택 사항): 버튼을 누르세요.

 

▲ "불러오기" 탭을 누르고, 스마트폰에 저장했던 개인키 파일을 선택하면 자동 반영됩니다.

 

▲ 우측 상단 체크 버튼을 눌러 적용&빠져나옵니다.

 

▲ "연결" 탭에서 우측 하단 +버튼 누르세요.

 

닉네임 : 본인이 알아보기 쉽게 정하세요.

형식 : SSH 인지 확인하세요.

주소 : IP주소, ddns주소 등 연결되는 것을 입력하세요.

계정 정보 : 아까 생성했던 것을 선택하세요.

포트 : 22번인지 확인하세요. 아치리눅스 설정에서 바꿨다면 그 값으로 넣으세요.

우측 상단 체크 버튼을 눌러 적용&빠져나옵니다.

 

▲ 연결 탭에 추가된 항목을 눌러 연결 시도해 보세요.

 

▲ 처음 연결하는 것이면 "호스트 검증" 창이 떠요.

"수락" 버튼을 눌러 넘어갑니다.

 

▲ 접속 성공 확인했으면 exit 눌러 빠져나옵니다.

 

사실, SSH 연결 환경 구축에 집중했던 이유는 RDP 원격 접속이 막힐 때를 대비하기 위함입니다.

GDM(Gnome Display Manager) 로그인 창이 뜨면 RDP가 막힌다고 수 차례 적었지요? 그래서 자동 로그인으로 GDM 로그인 창을 피했지만, 컴퓨터 앞을 지나던 누군가가 "로그아웃" 버튼을 고의/실수로 눌러서 GDM 로그인 창을 띄우면 아주 곤란해지는 것이죠.

이 경우, SSH로 접속해서 재부팅 해주면 RDP 원격 접속을 다시 할 수 있습니다.

 

이외에도 SSH 연결로 SFTP 접속해서 파일 교환을 수월하게 할 수 있고.

(FTP 서버 구축 귀찮을 때 대체제로 쓰기 좋음.ㅎ)

 

끝까지 따라오느라 고생 많으셨습니다.

 

※ Dlink 디링크 DIR-615 공유기 포트포워딩(가상서버) 설정 방법 - 외부에서 들어오는 요청을 받기 위해 포트를 개방/변경하는 과정입니다.

https://jimnong.tistory.com/604

 

※ DuckDNS(무료 DDNS) 가입, 설정, 공유기 세팅(Padavan 펌웨어) - IP주소를 보기 쉽게 바꾸는 과정입니다.

http://jimnong.tistory.com/704

 

※ Dlink 디링크 DIR-615 공유기 WOL 설정 방법(+랜카드 설정) - 랜카드 설정이 원격 연결과 관련 있습니다.

http://jimnong.tistory.com/578

반응형