Trouble Shooting

com.jcraftjschJSchException-Auth-fail

abc94 2024. 6. 2. 16:53

회사 내부에서 겪었던 오류와 문제 해결 과정에 대해 공유하고자 합니다.

사실 원인 자체는 단순했습니다만, 원인을 찾고 해결하는 과정에서 얻은 러닝 포인트를 기록하고자 합니다.

원인 자체는 서버 계정 패스워드 변경 이슈 였습니다;;


  • 인프라 구조
  • 발생 원인
  • 해결 과정

1. 인프라 구조

원인을 파악하기 전, 이해를 돕기 위해 내부 인프라 구조를 간략하게 전달드립니다.

 

인프라 구조

 

모니터링 서버(Jeus8)을 통해 San storage의 Health Check / Lun 생성 등을 진행합니다.

특이하게, 특정 SAN 장비만 SSH 프로토콜을 이용해서 통신을 진행했었고, 별도의 Managing 서버를 통해 해당 Storage 에 명령어를 전달 하였습니다.

 

2. 발생 원인

웹에서 표현되는 오류 만으로는 어떠한 이슈인지 알 수 없었기에, 소스를 통해 해당 원인을 분석하고자 했습니다.

원인이 되는 소스는 대략 아래와 같습니다.

 

JSCH 라이브러리를 통해 JAVA 에서 원격으로 SSH 명령어를 전달할 수 있습니다.

아래 소스는 계정 정보를 통해 해당 서버와 Session을 맺기 위한 소스로 볼 수 있겠군요

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class Main {

    public static void main(String[] args) throws JSchException, SftpException, IOException {
        
        String username = "XXXXXX";
        String host = "XXXXXX";
        String passwd = "XXXXXX";
        JSch conn = new JSch();
        Session session = null;
        session = conn.getSession(username, host, 22);
        session.setPassword(passwd);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

        channel.disconnect();
        session.disconnect();   

    }

}

 

3. 해결 과정

  • 실제 모니터링 서버에서는 Storage managing 서버와 SSH 접속이 잘 되는가?
  • Storage managing 서버에서 secure 로그는 어떻게 찍혔을까?

3-1 실제 모니터링 서버에서는 Storage managing 서버와 SSH 접속이 잘 되는가?

테스트 결과, 모니터링 서버와 Storage managing 서버와의 세션 연결은 잘되었습니다. 하지만, 간과하고 있었던 점이 하나 있었는데, SSH 프로토콜의 인증 방식은 두가지가 있다는 점이었습니다.

  • 키 인증 방식
  • 패스워드 인증 방식

해당 부분에 대해서는 SSH 프로토콜 편에서 자세히 다루겠습니다.

 

3-2. Storage manaing 서버에서 secure 로그는 어떻게 찍혔을까?

  • /var/log/secure

ssh 로그인 시도 / 인증 시도와 같은 로그를 저장하는 파일입니다.

 

해당 파일을 통해 com.jcraftjschJSchException-Auth-fail - password 오류 관련된 메시지를 발견할 수 있었습니다.

(위 사진과는 무관합니다)

 

실제 패스워드가 변경되었는지 확인하기 위해, Storage Managing 서버에 저장된 모니터링 서버의 공개키를 제거하였습니다.

패스워드가 어떠한 이유 때문인지는 모르겠지만, 모니터링 서버 DB 에 저장된 Password 와 달랐었습니다;;

이후, 패스워드 동기화를 통해 해당 문제를 해결했습니다.

 

4. 마치며..

사실 원인 자체는 되게 단순하였습니다.

하지만, 러닝 포인트는 크게 두가지가 있었습니다.

  • /var/log/secure 파일의 역할
  • SSH 프로토콜의 인증 방식

오늘도, 방문해 주셔셔 감사합니다.