회사 내부에서 겪었던 오류와 문제 해결 과정에 대해 공유하고자 합니다.
사실 원인 자체는 단순했습니다만, 원인을 찾고 해결하는 과정에서 얻은 러닝 포인트를 기록하고자 합니다.
원인 자체는 서버 계정 패스워드 변경 이슈 였습니다;;
- 인프라 구조
- 발생 원인
- 해결 과정
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 프로토콜의 인증 방식
오늘도, 방문해 주셔셔 감사합니다.