SSH는 원격 컴퓨터에 연결하는 데 유용한 도구이지만, Linux에서 공개 키와 관련된 “권한 거부(공개 키)” 오류가 발생할 수 있습니다. 다행히도 이 문제를 해결하기 위해 시도할 수 있는 몇 가지 간단한 수정 방법이 있습니다.

공개 키란 무엇인가요?

공개 키와 그에 대응하는 비공개 키입니다. 후자는 민감한 정보이므로 어떤 대가를 치르더라도 보호해야 하지만, 전자는 시스템 전체에 자유롭게 배포하여 보안 액세스를 용이하게 할 수 있습니다. SSH를 통해 원격 서버와 연결을 시도할 때 클라이언트는 자동으로 두 키를 모두 사용하여 사용자의 신원을 인증하고 비밀번호 없이도 진입할 수 있도록 합니다.

이 접근 방식을 사용할 때 주목할 만한 이점 중 하나는 공개 키만 공개하면 된다는 것입니다. 개인 키의 기밀성을 유지하는 한, 공개 키가 유출되더라도 개인 키는 계속 보호됩니다. 해당 개인 키에 대한 액세스 없이는 공개 키만으로는 유용성이 부족하다는 점에 유의해야 합니다.

오픈 소스 소프트웨어 영역에서 널리 사용되는 SSH 클라이언트 및 서버인 OpenSSH를 사용하려면 원격 시스템의 공개 키가 포함된 파일(예: 홈 디렉터리 내에 있는 “.ssh/authorized\_keys”)이 특정 권한 요건을 준수해야 합니다. 그렇게 하지 않으면 ‘쓰기 가능한’ 권한이 없기 때문에 SSH 연결이 실패하게 됩니다. 또한 디렉터리가 마침표(.)로 시작하기 때문에 ‘ls’와 같은 명령을 사용할 때 디렉터리가 눈에 띄지 않아 사용자가 디렉터리 내용을 보려면 ‘ls -A’를 실행해야 할 수 있습니다.

파일이 다른 장치에서 전송되었거나 현재 장치에서 생성된 경우 파일의 권한이 변경될 수 있습니다. 그러나 이 문제를 해결하는 방법은 간단합니다.

공개 키 권한 확인

본질적으로 authorized\_keys 파일은 호스트 서버에 원격으로 로그인할 수 있는 액세스 권한이 부여된 클라이언트 엔터티에서 파생된 공개 키를 통합한 역할을 합니다. 이 파일의 처리에 적용되는 일반적인 속성을 보려면 “-l” 수정자와 함께 “ls” 명령을 사용하면 관련 정보를 얻을 수 있습니다:

 ls -l ~/.ssh/authorized_keys

앞서 언급한 디스플레이는 소유자, 어셈블리 및 추가 개인과 관련된 권한 구성을 설명해야 합니다. 태그의 마지막 여섯 글자에 유의하세요. ‘W’가 있는 경우, 이는 단체 또는 비관련 당사자가 새길 수 있는 권한이 있음을 의미하므로 취약한 요소가 될 수 있습니다.

이 글도 확인해 보세요:  ChatGPT는 안전한가요? OpenAI 챗봇의 6가지 사이버 보안 리스크

해당 파일을 그룹과 다른 개인 모두의 접근을 제한하면서 나만 수정할 수 있도록 하려면 chmod 명령을 사용하여 권한을 수정해야 합니다.

양적, 질적으로 두 가지 방법이 존재합니다.

수치적 접근 방식을 사용하는 것이 더 간결할 수 있지만, 8진수 권한을 불러와야 합니다:

 chmod 700 ~/.ssh/authorized_keys

기호를 체계적으로 사용하면 정보를 더 쉽게 기억하고 인식할 수 있기 때문에 기억력을 향상시키는 데 효과적일 수 있습니다. 이 접근 방식에는 특정 기호를 다양한 데이터 또는 개념과 연결하여 필요할 때 해당 정보를 빠르게 검색하는 데 사용할 수 있습니다. 이 방법을 사용하면 중요한 세부 사항을 더 잘 기억하고 마음대로 기억할 수 있는 능력이 향상됩니다.

 chmod go-w ~/.ssh/authorized_keys 

ssh-agent를 사용하여 안전하게 키 복사

사용 가능한 공개 키를 ~/.ssh 디렉터리에 있는 authorized\_keys 파일에 직접 수동으로 삽입할 수도 있지만, ssh-agent 유틸리티를 사용하면 권한 문제가 발생할 가능성을 최소화하는 데 도움이 될 수 있습니다.

SSH 에이전트 실행을 시작하려면 터미널 또는 명령 프롬프트에서 “ssh-agent” 명령을 활용하세요.

 eval "$(ssh-agent-s)"

보안 셸(SSH)을 통해 원격 서버에 액세스하고 SSH 에이전트를 사용하려면 SSH 세션 내에서 “-A” 명령줄 옵션을 사용하세요.

 ssh -A [email protected] 

원격 서버의 sshd 설정 확인

이전 시도가 실패한 경우, 관리 권한이 있는 경우 원격 호스트의 sshd 서버 내에서 특정 설정을 조정해야 할 수 있습니다. 또는 이러한 권한이 없는 경우, 당사는 시스템 관리자에게 도움을 요청하여 SSH 연결과 관련된 모든 문제를 해결해야 할 의무가 있습니다. 이러한 조치에는 내재된 보안 위험이 수반되므로 최후의 수단으로만 고려해야 한다는 점을 유의해야 합니다.

실제로 SSH 데몬(sshd)에 대한 포괄적인 구성 파일은 “/etc/ssh/sshd\_config” 경로에서 찾을 수 있습니다. 이 특정 파일은 존경받는 ‘루트’ 사용자가 소유하고 있기 때문에, 그 내용을 수정하려면 강력한 명령어인 “sudo”를 사용해야 합니다. 예를 들어, 강력한 편집기인 Vim을 사용하는 경우 다음 명령을 실행할 수 있습니다:

 sudo vim /etc/ssh/sshd_config 

권한이 부여된\_keys 파일에 월드 쓰기 권한이 있는 경우에도 SSHD에서 로그인을 허용하려면 지정된 파일 내에서 “StrictModes” 매개 변수를 “no”로 설정해야 합니다.

이 글도 확인해 보세요:  Linux 서버의 모든 물리적 이더넷 포트를 나열하는 방법

구성을 다시 로드하거나 다시 시작하는 명령을 실행하여 보안 셸(SSH) 서버의 작동을 재개하면 네트워크에 연결된 컴퓨터 시스템에 대한 보안 원격 액세스 및 제어가 재개될 수 있습니다.

 sudo systemctl restart sshd.service

이제 SSH 공개 키 권한 오류를 수정할 수 있습니다

경우에 따라 원격 서버의 SSH 공개 키와 관련된 문제가 발생할 수 있습니다. 하지만 대부분의 경우 키에 대한 무단 액세스를 방지하도록 파일 권한이 올바르게 구성되었는지 확인하는 것만으로도 문제가 해결됩니다. 또한, ssh 에이전트를 사용하면 연결의 안정성을 높일 수 있습니다. 이러한 조치로도 불충분한 것으로 판명된 경우, 실행 가능한 해결책을 제공하기 위해 SSH 서버의 설정을 조정해야 할 수도 있습니다.

By 김민수

안드로이드, 서버 개발을 시작으로 여러 분야를 넘나들고 있는 풀스택(Full-stack) 개발자입니다. 오픈소스 기술과 혁신에 큰 관심을 가지고 있고, 보다 많은 사람이 기술을 통해 꿈꾸던 일을 실현하도록 돕기를 희망하고 있습니다.