SSH 패스워드 없이 로그인 하기
SSH 패스워드 로그인 방식을 추천하지 않는 이유 ?
SSH는 Secure Shell 의 줄임말로 원격 호스트에 접속할때 쓰이는 보안 프로토콜입니다.
개인 노트북이나 데스크탑을 통해서 서버(예: AWS, GCP, 물리서버)에 접속할때 주로 활용합니다.
하지만 SSH 접속 방식을 패스워드로 하게 되면 누구든 아이디/패스워드 입력해보면서
접속을 시도할 수 있게됩니다.실제로 root,ubuntu 등 사람들이 많이 쓸만한 ID와 PW 를
대입해서 SSH 접속을 시도하는 봇(Bot)들이 존재하고 접속이 되면 리눅스 서버에있는
파일들을 암호화 하고 아래처럼 비트코인을 요구하기도 합니다.
실제로 SSH 무단접속으로 인해서 아래와 같이 온갖 파일들이 .crp 파일로 암호화되고
$ ls reallinux.c.crp reallinux.txt.crp reallinux.out.crp ...
"!!!Your files has been encrypted. In order to decrypt your data, you need to send 0.1 BTC 3EkXL4e... bitcoin address!!!" 와 같은 비트코인을 요구받았던 경험도 있습니다.
$ cat reallinux.c.crp ... �km,Vg̚�5k�5��>!�F6wWZEX&՝ي<����ز�x^;��I��S�)��4�Eiݑ����id�V�B�<�vZ���K�:�kN3ij�Wc!�"#��#�����@�̘t !!!Your files has been encrypted. In order to decrypt your data, you need to send 0.1 BTC to 3EkXL4eP9hupTwavAkeZLoC7PPW8MSdtAf bitcoin address!!!
따라서 패스워드 방식은 아래와 같이 원천차단하는것을 추천합니다.
$ sudo nano /etc/ssh/sshd_config ... PasswordAuthentication no
추가적으로 root 계정 접속은 차단하고 개별 유저계정으로 접속하는것도 추천합니다.
이유는 root 계정은 superuser 로 리눅스 서버내에서 거의 모든 권한을 가지고 있어서
만약 root 계정으로의 무단 접속, 해킹이 성공하게 되면 피해가 일반 유저계정 보다 심할 수 있기 때문입니다.
$ sudo nano /etc/ssh/sshd_config ... PermitRootLogin yes
참고로 SSH 서버 설정 변경후에는 아래와 같이 재시작을 해야 설정이 적용됩니다.
$ sudo service ssh restart
SSH 패스워드 없이 SSH 키를 통해서 접속하려면 ?
(1) 개인 PC, 노트북에서 SSH 공개키를 생성
윈도우 운영체제를 사용하고 있다면 CMD 명령어 프롬프트를 실행시키고 아래와 같이 명령어를 입력하고
기본적으로 Enter 키만 입력해도 기본값들로 공개키 생성이 완료 된다.
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\Reallinux/.ssh/id_rsa): Created directory 'C:\Users\Reallinux/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\Reallinux/.ssh/id_rsa. Your public key has been saved in C:\Users\Reallinux/.ssh/id_rsa.pub. The key fingerprint is: SHA256:IbW57T6Xoas0h217Wzy3jplQPPTOJBEhL/yD7fa/xSY Reallinux@677d777637db The key's randomart image is: +---[RSA 3072]----+ | . . o. | | . o. o . | | . + o + | | . + B o | | S .. O o | | + +.B. | | + =o =Eo=| | . =o.*.==o| | ..+=.=.=+| +----[SHA256]-----+
(2) 개인 노트북에서 생성한 공개키 내용 복사
공개키는 외부에 노출이 되어도 보안상 문제가 되지않고 SSH 서버와의 통신을 위해서
활용되는키 라서 CMD 명령어 프롬프트상에서 생성된 공개키 내용을 출력하고 내용을 복사합니다.
type C:\Users\Reallinux\.ssh\id_rsa.pub
(3) 서버(예: AWS, GCP, 물리서버 등)에 접속하여 authorized_keys 파일에 공개키를 추가
리눅스 서버에 접속하여 ~/.ssh/authorized_keys 파일에 공개키를 내용을 추가 합니다.
파일이 없다면 안에 공개키 내용을 아래처럼 그대로 붙혀넣기 합니다. 추가적으로 허용할 공개키는
다음 라인으로 추가해서 적어주면 접속허용이 가능합니다.
$ nano ~/.ssh/authorized_keys ...(생략)... ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8zcmIVIbt5ufDEdjR2asvaxSOHaD3ZnVegkseC4S8jRz+/XJv+DmBF3O6gZGKL9sRGucvmReJZk/cDa01KwKgPxu4sgbxqaoBmMpjmggGlmJ+g09WYczG9jUSV/y+V9IE/4gpL6LGsFpKhYXqB7kPsEgU8Xw8kJZ6sSt7ObV7jEbAB2SEy7QZS+Ex4150ckczxXcW9fFof52MCCRuhImMpEABY4CDAulb8fWlyQEb6YMNfQGjawY+khW5ItFrocEPtJaSULRYSeL+//gNMfvOMkq+CE2MGw3hN4ZJduTwow8zjBes+3IJtpDf97u2WJxgc+azxOZwr4UqjeB/DBHIkzlKXr74Di07HiNpyjAfKo6mHOj73ElkF9DK1yw2ADHw8uuTNMY9IIinERZVEgnsoW2mhPD16hBz65lPJv/UeAsSO8p8sG9UE2pNEJCKtxtaOTvtds+lN+LOpWsv+gG11lze8sMEbqeO7LwSA9EUZHORUkLVVutYbhw63lqEAAk= Reallinux@677d777637db
(5) 개인 PC, 노트북 통해서 명령어 프롬프트 또는 PowerShell 통해서 SSH 접속 시도
아래와 같이 유저명과 서버 IP 주소를 입력해서 패스워드 없이 SSH 접속이 가능합니다.
만약 SSH 포트번호를 기본포트번호 22번으로 사용 중이라면 -p 옵션은 생략 가능합니다.
$ ssh -p [SSH 포트번호] [유저명]@[서버 IP주소] 예시: $ ssh reallinux@172.15.123.1
본 내용과 관련된 리얼리눅스강의는 리눅스 기초 쉘 스크립트 마스터를 추천합니다.