호스팅 서버 작업을 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
이제 다 되었다. 연결을 끊은 다음 다시 접속해보면 패스워드를 묻지 않고 바로 프롬프트가 뜬다. 🙂