앱 내부에서 SSH 권한 오류 해결하기

새로운 SSH 사용자들은 종종 난관에 부딪힙니다. 다음과 같은 오류를 보게 됩니다:

WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0644 for 'id_rsa.pem' are too open.

해결 방법은 간단한 터미널 명령인 chmod 600 id_rsa.pem을 실행하는 것입니다. 엔지니어들에게는 쉽지만, 터미널을 사용하지 않는 대행사 직원이나 IT 운영자들에게는 큰 장벽이 됩니다. 이는 끊임없는 기술 지원 요청으로 이어집니다.

저희는 이 문제를 앱 내부에서 해결하기로 했습니다. 권한을 자동으로 진단하고 수정하는 시스템을 구축했습니다.

문제점 OpenSSH는 권한이 너무 느슨하면 개인 키(private key) 로드를 거부합니다. 다른 사람이 키를 읽을 수 있다면 보안은 무너진 것이나 다름없습니다. 대부분의 키는 기본값이 0644로 설정되어 있어 누구나 읽을 수 있습니다. OpenSSH는 0600 권한을 요구합니다.

해결책 저희는 이를 처리하기 위해 2단계 접근 방식을 사용합니다.

1단계: 실패 후 복구 권한 문제로 연결에 실패하면 UI에 'Fix and retry' 버튼이 표시됩니다. 이 버튼을 클릭하면 수정 작업이 실행되고 연결을 다시 시도합니다.

2단계: 연결 전 예방 사용자가 연결을 클릭하기 전에 앱이 키 경로를 검사합니다. 권한이 잘못되어 있으면 경고를 표시합니다. 사용자는 이를 수정하거나 그대로 연결할지 선택할 수 있습니다.

Windows의 경우 처리 방식이 다릅니다. Windows는 Unix 권한 대신 ACL을 사용합니다. 저희 코드는 플랫폼을 감지하고 icacls와 같은 올바른 명령어를 실행하여 액세스 권한을 수정합니다.

자동으로 조용히 수정하지 않는 이유 시작 시 키를 자동으로 수정하는 방안도 고려했습니다. 하지만 이 아이디어는 기각되었습니다. 일부 워크플로우에서는 공유 키에 대해 특정 권한이 필요하기 때문입니다. 사용자에게 묻지 않고 권한을 변경하면 사용자의 워크플로우를 망가뜨릴 수 있습니다.

저희의 원칙은 간단합니다. 모든 것을 진단하되, 사용자가 버튼을 클릭했을 때만 파일을 수정합니다.

결과 기술적 장벽을 흡수하는 UX를 구축하면 지원 요청 건수를 줄일 수 있습니다. 사용자에게 무엇이 잘못되었는지 보여주고 클릭 한 번으로 해결할 수 있는 방법을 제공합니다. 이는 터미널을 사용해야 한다는 심리적 장벽을 제거합니다.

출처: https://dev.to/susumun/solving-permissions-are-too-open-from-inside-the-app-auto-diagnosing-and-auto-fixing-ssh-key-3j75