SSH(보안 쉘, Secure Shell)는 컴퓨터 네트워크를 통해 데이터를 안전하게 전송하고, 원격 시스템에 접속하도록 지원하는 프로토콜 및 해당 프로토콜을 구현한 프로그램을 가리키는 용어입니다. 이는 사용자가 원격 위치에 있는 서버에 안전하게 접속하고, 필요한 작업을 수행할 수 있게 해주는 중요한 도구인데요.
SSH 접속에는 일반적으로 두 가지 주요 방법이 사용됩니다. 하나는 사용자가 직접 비밀번호를 입력하여 인증하는 방식이고, 다른 하나는 별도의 인증 키를 사용하는 방식입니다. 특히, 후자의 방식에서 사용되는 것이 SSH 키입니다. SSH 키는 암호화된 두 개의 키 쌍, 즉 개인키와 공개키로 구성됩니다. 개인키는 사용자만이 소유하고 접근할 수 있는 비밀 키로, 안전하게 보관되어야 합니다. 반면에 공개키는 원격 서버에 등록되어, 사용자가 서버에 접속할 때 인증에 사용되는 키입니다.
이러한 SSH 키를 사용하면, 사용자는 비밀번호를 직접 입력하는 대신 키를 통해 원격 서버에 안전하게 접속할 수 있습니다. 이는 서버에 대한 접속을 더욱 안전하고 편리하게 만들어주는 동시에, 보안을 강화하는 데에도 기여하며 다음과 같은 방식으로 등록할 수 있습니다. Linux는 다양한 배포판이 존재하고 각각의 설정이나 사용 방식에 차이가 있지만 SSH 프로토콜 및 관련 도구가 표준화되어 공개키를 등록하는 방식은 대부분의 Linux 배포판에서 동일하게 적용됩니다.
튜토리얼 환경: 윈도우 11, Ubuntu server 22.04
Linux 서버에서 공개키 등록하기
SSH키(개인키와 공개키)를 생성(링크 업데이트 예정)한 뒤 공개키를 등록할 서버에 접속 해 다음 작업을 진행해야 합니다.
서버에서 직접 등록
Linux에서 SSH 공개키를 원격 서버에 등록하는 방법은 다음과 같습니다.
공개키를 등록하기 위해서는 공개키를 확인후 해당 키 값을 복사해야 합니다. 이를 위해 키 파일을 직접 열어서 확인하거나 다음의 명령어를 실행하면 공개키 파일의 내용이 출력되는데 이를 복사합니다.
cat ~/.ssh/id_rsa.pub
이제 등록할 Linux 서버에 접속(링크 업데이트 예정) 후 원격 서버에서 ~/.ssh
디렉토리로 이동합니다. 해당 디렉토리가 없다면 만들어야 합니다. 디렉토리를 만드는 명령어는 다음과 같습니다.
mkdir ~/.ssh
원격 서버에서 ~/.ssh/authorized_keys
파일을 열고, 복사한 공개키를 붙여넣습니다. 해당 파일이 없다면 만들어야 합니다. 파일을 만드는 명령어는 다음과 같습니다.
touch ~/.ssh/authorized_keys
그리고 복사한 공개키를 이 파일에 직접 붙여넣기 하거나 다음 명령어를 사용해 바로 삽입할 수 있습니다. 이 때, <복사한 공개키>
부분에는 실제 복사한 공개키 내용을 붙여넣습니다.
echo <복사한 공개키> >> ~/.ssh/authorized_keys
이제 모든 변경 사항을 저장하고 나서 파일을 닫아야 합니다. 만약 vi 에디터를 사용한다면 :wq
를 입력 후 Enter 키를 눌러 저장하고 닫을 수 있습니다. nano 에디터를 사용하는 경우에는 Ctrl + X를 누르고, 변경 사항을 저장하라는 메시지가 나타나면 Y를 누르고 Enter 키를 눌러 저장하고 닫을 수 있습니다.
마지막으로, ~/.ssh
디렉토리와 authorized_keys
파일의 권한을 적절하게 설정합니다. 이는 보안을 위해 필요한 절차로 다음 명령어를 순서대로 사용합니다. 리눅스 권한 퍼미션 chmod chown rwxrwxrwx 알아보기
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
이제 생성한 SSH 공개키가 원격 서버에 등록되었습니다. 이후부터는 비밀번호를 직접 입력하지 않고도, 생성한 개인키를 통해 원격 서버에 접속할 수 있습니다.
SSH는 사용자가 별도로 키를 지정하지 않았을 경우, 기본적으로 ~/.ssh/id_rsa
라는 경로의 개인키를 사용하도록 설정되어 있어 사용자와 서버 주소만으로 바로 키 값을 가져와서 접속할 수 있습니다.
참고: 단, SSH는 기본적으로~/.ssh/id_rsa
라는 이름의 개인키를 자동으로 사용하려고 시도합니다. 따라서 키 파일의 이름을 변경하였다면, 기존처럼-i
옵션을 사용하여 키 파일의 경로를 명시적으로 지정해주어야 합니다.
공개키 서버 전송
위 방식을 사용하는 것이 기본적이지만 클라이언트의 공개키를 원격 서버에 바로 등록하는 과정을 한 줄의 명령어로 간단히 처리할 수도 있습니다.
참고: 이 명령어를 실행하기 전에 원격 서버에~/.ssh
디렉토리가 존재하고, 적절한 권한 설정이 되어 있는지 확인해야 합니다. 이 명령어는~/.ssh
디렉토리가 이미 존재한다는 가정하에 작동해 원격 서버에~/.ssh
디렉토리가 없다면, 에러를 반환하게 됩니다.
다음의 명령으로 user@server
사용자의 ~/.ssh/authorized_keys
파일에 공개 키를 추가할 수 있습니다. 이렇게 하면 원격 서버에 직접 접속하여 공개키를 복사-붙여넣기 하는 과정을 생략할 수 있어 편리합니다.
cat ~/.ssh/id_rsa.pub | ssh user@server "cat >> ~/.ssh/authorized_keys"
각 부를 좀 더 자세하게 정리하면,
cat ~/.ssh/id_rsa.pub
: 이 부분은 클라이언트의 공개키를 출력하는 명령입니다. 공개키는~/.ssh/id_rsa.pub
파일에 저장되어 있습니다.|
: 이 기호는 파이프라고 부르며, 이전 명령의 출력을 다음 명령의 입력으로 전달하는 역할을 합니다. 여기서는cat ~/.ssh/id_rsa.pub
의 출력, 즉 공개키를ssh user@server cat >> ~/.ssh/authorized_keys
명령으로 전달합니다.ssh user@server
: 이 부분은 사용자 이름(user)과 서버 주소(server)를 입력하여 원격 서버에 SSH로 접속하는 명령입니다. 여기서 user와 server는 각각 실제 사용자 이름과 서버 주소로 대체해야 합니다.cat >> ~/.ssh/authorized_keys
: 이 부분은 원격 서버에서 실행되는 명령입니다. 이 명령은 파이프로 전달받은 공개키를 원격 서버의~/.ssh/authorized_keys
파일에 추가합니다.