SSH 비밀번호 없이 접속하기 (ssh-keygen)

호스팅 서버 작업을 ssh로 한다거나, 특정 서버에 ssh를 통해 자주 접속하는 경우 비밀번호를 매 번 입력하는 것은 귀찮은 일이다. scp 커맨드로 파일들을 여럿 복사한다거나 한다면 더더욱 그렇다. 또 중간에 비밀번호를 물어보면 쉘 스크립트 안에 넣을 수 없기 때문에 불편하기도 하다.

그런데 key 교환을 미리 해 두어 비밀번호 입력을 건너뛰는 방법이 있다. ssh 클라이언트의 public key를 서버에 authorized_keys 라는 파일에 미리 기록해두면 동작한다.

먼저 클라이언트에 key 파일이 존재하는지 확인한다. ~/.ssh/ 디렉토리에 id_rsa 라는 파일이 있다면 이미 키는 존재하는 것이므로 아래 과정은 건너뛴다. 없다면 다음과 같이 ssh-keygen 커맨드를 통해서 key를 생성해준다.

imac:~ cky$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/cky/.ssh/id_rsa): <그냥 엔터>
Enter passphrase (empty for no passphrase): <그냥 엔터>
Enter same passphrase again: <그냥 엔터>
Your identification has been saved in /Users/cky/.ssh/id_rsa.
Your public key has been saved in /Users/cky/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cwHYDEvfZW8SL1tAr4HsX3XWkukhQBrdjPYRbkq+eC0 cky@imac.local
The key's randomart image is:
+---[RSA 2048]----+
|      o=ooo=B.   |
|     ..oo*+*+* o.|
|      . o.*.B.@ =|
|         + +.@ =.|
|        S = o o  |
|         + + .   |
|        . E o    |
|         . .     |
|                 |
+----[SHA256]-----+

다음으로 서버에 public key를 넣어준다. 서버에 접속한 후 ~/.ssh/ 디렉토리에 authorized_keys라는 파일이 있는지 찾는다. 해당 파일에 클라이언트의 id_rsa.pub 파일 내용을 넣어주면 된다. 아래와 같은 형식으로 저장이 되면 된다.

host:.ssh cky$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9PGkVPrUxg59mw2wwOuePjnhx3Xu09iqyTPvpKlcxI43osWE1DwxwLcHdxZn7hbWU48yIF2qguI15RXucYuoy+gzmnN5b2L5T9vUxSYzwGTicgpU3JJImjvRDpdakqtqdodjXFtJEruvZ81BcKbL3F9TMC6+onaQf2DtZaIVZqDOsEHL4pUeAl7hMtDoAakYmUGPysQWjnVFNdkjfei3jiojMUrED6GeqG1SOv1etQM9qDDRX+RR6CjNVsJhAHpmLDoAJdJD6p/s/c4CYK89Rc1mTccdwJO8zaJDe280Ylp7AjNvZkox1UhWOZT0KQfHCgT+Mj0e6u423XwN71ZeB cky@imac.local
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQJW8NidufUidueieNoPvm1Z7iK1Yd595Yk90bvSYl775CJ/Dm1ejHxO/Fvs00lsKOgvYrTlCFA7eODYi5URFB/U3OUjfLFfstLekkk53DTx2Br2NUJPymc0MevroRwm0s17R+35uxqv8BD8aB/U7MFOooQQgh3QxyTcKTvMnzXLbjjhNsBZTbm/mUwoV63Snceg+XaEU476WP3M0XTRiIv1sQ1FO+3jO/R+V93X5WPrPRCMKavaTir+7DUFzcFH/ZOyAL82PV9vbJO4ox4Mq24DIwZio78UKwaVlNbssH+dHU8r8aVR2xvFVXYNs2pyFfmQTnbzaN8YVtbh86mHJL pi@raspberrypi
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9ARQI5M7F05QWwt5flzIfhP7rkoeZgGgIDPWILKcDKFXHSn6YQ7pnpibds9twa0J0iXj5Rkn6JbIUwKKNF89IqLpusd8IufM/XblzoUpCGSwg8UETQvdEDyY4hYxBnlT+jGKxbf6TgQHUy0sG2B0ctDi4+eFhAfOSiMSAP2UF6BqVrNTOx2PD8WqR8EzpzONivQtE0d3Ob9ueHdhHY9G9Oug+JMMb8MbjfkeowuU89Mw/m4dr10DE6tksPKXb7k03dfXbu5mDXsCIr8+IM1B1gl27BSlvjG7AwTbPHXHORK9XYgodY3eo4WyEWU4cFBXwZFFMJv6gfnAIjcgZKOT7 root@raspberrypi

이제 다 되었다. 연결을 끊은 다음 다시 접속해보면 패스워드를 묻지 않고 바로 프롬프트가 뜬다. 🙂

라즈베리파이 모니터 없이 최소 설치

호스팅을 직접 라즈베리파이에 해 보면 어떨까 싶은 마음에 사용하지 않고있던 라즈베리파이2를 꺼내보았다. 웹 서버를 운용할 것이라서 데스크탑 환경은 필요가 없기 때문에 무작정 RASPBIAN JESSIE LITE 버전을 다운로드하여 MicroSD 카드에 이미지를 풀어냈다.

시행 착오 및 검색을 통해 부팅 전 다음과 같은 사항이 필요하다는 것을 알아냈다.

Raspberry Pi

고정 IP

모니터, 키보드는 연결하지 않을 것이므로 항상 동일한 IP를 갖도록 하는 것이 필요했다. boot 파티션에 보면 cmdline.txt 라는 파일이 있는데, 이를 열어 ip=xxx.xxx.xxx.xxx를 입력해주면 된다.

pi@raspberrypi:/boot $ cat cmdline.txt 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes ip=10.0.1.100 rootwait

SSH enable

기본적으로 LITE 이미지는 ssh가 disable 되어있다. 이를 enable 하기 위해서는 boot 파티션에 ssh 라는 이름의 빈 파일을 넣어주면 된다. touch ssh 식으로 하나 만들어준다.

위와 같이 두가지 설정을 해 주면 ssh를 통해서 라즈베리파이에 접속할 수 있다. 기본 계정은 pi/raspberry 이다. 접속 후 패스워드를 변경해주고 apt-get update/upgrade를 먼저 해 둔다.

이제 APM을 설치하여 웹서버를 운용하면 된다.