개요
여러분의 컴퓨터에서 연결 시마다 매번 암호를 입력하지 않도록 라즈베리파이를 설정할 수 있습니다. 이를 위해 SSH key를 생성해야 합니다.
※ 라즈베리파이 보안강화 에서도 다루었지만 암호가 아닌 SSH Key 기반의 SSH 연결을 사용하는 것은 보안 측면에서도 도움이 됩니다.
SSH keys 확인
먼저, 라즈베리파이에 연결할 PC에 이미 생성되어 있는 키가 없는지 확인합니다. (접속에 사용하고자 하는 PC가 윈도우즈를 운영체제로 사용한다면 PowerShell에서 다음 명령을 실행합니다.)
$ ls ~/.ssh
만약 id_rsa.pub
나 id_dsa.pub
가 보인다면 이미 키가 있는 것이니 새로운 SSH keys 생성 단계는 건너 띄어도 좋습니다.
새로운 SSH keys 생성
새로운 SSH keys 를 생성하려면 다음 명령어를 입력합니다.
$ ssh-keygen
명령어를 입력하면 생성한 key를 어디에 저장할 것인지 묻습니다. 그냥 Enter
를 입력하여 기본위치 (/home/pi/.ssh/id_rsa
) 에 저장하는 것을 추천합니다.
다음은 passphrase를 묻습니다. 이것은 추가 보안 수단으로 생성한 key를 passphrase 없이 사용할 수 없게 만듭니다. 따라서 passphrase를 설정한다면 누군가 여러분의 key를 몰래 복제해서 가져간다고 해도 passphrase를 모르면 key를 사용할 수 없습니다. 사용하지 않을 것이라면 그냥 Enter
를 입력합니다.
key가 생성되면 .ssh
폴더의 내용을 확인합니다.
ls ~/.ssh
다음과 같이 id_rsa
와 id_rsa.pub
파일이 보여야 합니다.
authorized_keys id_rsa id_rsa.pub known_hosts
id_rsa
파일은 개인키(private key)입니다. 외부로 유출되지 않도록 합니다.id_rsa.pub
파일은 공개키(public key) 입니다. 이 공개키를 연결하려는 기기(라즈베리파이)와 공유하도록 합니다. 해당 기기는 공개키와 개인키가 모두 일치할 때 연결을 허용해 줄 것입니다.
공개키의 내용을 다음과 같이 확인할 수 있습니다.
cat ~/.ssh/id_rsa.pub
공개키는 다음과 같은 형식을 띄고 있습니다.
ssh-rsa <REALLY LONG STRING OF RANDOM CHARACTERS> user@host
공개키를 라즈베리파이에 복사하기
라즈베리파이에 공개키를 복사하려면 다음 명령을 입력하면 됩니다. 이 명령어는 라즈베리파이의 authorized_keys
파일에 앞서 확인한 공개키의 내용을 추가합니다.
ssh-copy-id pi@192.168.0.3
하지만 라즈베리파이에 연결하고자 하는 PC가 윈도우즈를 운영체제로 사용한다면 ssh-copy-id
명령어가 없을 것입니다. 이 경우는 직접 공개키 파일을 복사해주어야 합니다.
윈도우즈 10의 Windows PowerShell에서 다음 명령을 사용하여 공개키를 라즈베리파이에 추가할 수 있습니다.
cat ~/.ssh/id_rsa.pub | ssh pi@192.168.0.3 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
※ SSH 연결이 안 되는 경우, 입력한 IP주소가 정확한지 혹은 라즈베리파이에 SSH 접속 허용이 설정되었는지 확인합니다.
오류
윈도우즈 10에서 생성한 SSH 키를 이용하여 라즈베리파이에 접근하고자 하였으나 다음과 같은 오류가 발생하였습니다.
Permissions for 'C:\\Users\\yungj\\.ssh\\id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\Users\\yungj\\.ssh\\id_rsa": bad permissions
현재 윈도우의 로그인한 사용자를 제외한 모든 사용자가 접근할 수 없도록 파일의 속성을 변경합니다. 윈도우즈의 파워쉘 또는 명령어 실행 줄에서 다음 스크립트를 실행하였습니다. ("C:\Users\yungj\.ssh"
항목은 자신의 SSH키 생성 경로를 입력합니다.)
:: Set Variable ::
set key="C:\Users\yungj\.ssh"
:: Remove Inheritance ::
cmd /c icacls %key% /c /t /inheritance:d
:: Set Ownership to Owner ::
cmd /c icacls %key% /c /t /grant %username%:F
:: Remove All Users, except for Owner ::
cmd /c icacls %key% /c /t /remove Administrator BUILTIN\Administrators BUILTIN Everyone System Users
:: Verify ::
cmd /c icacls %key%
출처 및 참고
'라즈베리파이 > 기초' 카테고리의 다른 글
라즈베리파이 - Watchdog Timer 설정 (0) | 2020.01.06 |
---|---|
라즈베리파이 WIFI 비활성하기 (0) | 2020.01.03 |
라즈베리파이 IP 고정하기 (0) | 2019.12.09 |
SSH세션 종료시 실행중인 프로그램 종료 방지 (Screen) (0) | 2019.11.16 |
라즈베리 파이와 블루투스 장치(스피커) 연결하기 (0) | 2019.06.19 |