C# 리눅스 서버 모니터링용 프로그램개발
회사에서 리눅스 서버를 모니터링 해야 하여 기존에 Putty 컨테이너에 Putty만 5개를 실행하여 모니터링 하던 사항을
저의 필요에 의해 모니터링 툴을 개발하게 되었습니다.
매번 5개의 Putty를 실행하여 접속하고 모니터링 하려니 너무 귀찮은 감이 있어 프로그램을 만든건 안자랑....
요즘은 라이브러리가 패키지화 되어서 Nuget에 많이 올라와 있는데 사용하기 어려운 부분 없이 잘 되어 있고
많은 사람들이 예제를 올려놓아 편한 감이 없이 않아 많이 있습니다.
일단 C# 윈폼 프로젝트 생성 후 Nunet 패키지를 설치 합니다.
설치할 패키지는 다음과 같습니다.
SSH.Client
SSH.NET (종속 : Renci.SshNet.Async)
두개의 패키지를 설치 할 경우 Visual Studio 2012의 경우에는 설치가 안될 수 있습니다.
이 경우 Visual Studio Community 2017 를 설치 하면 쉽게 패키지를 설치 할 수 있습니다.
Visual Studio 2012에서는 Nuget 패키지 설치가 잘 안되더군요
그리고 프로젝트 복사하여 Visual Studio 2012에서 프로젝트를 로드 하면 잘 됩니다 ㅎㅎㅎㅎㅎㅎ
다만 Visual Studio Community 2017를 설치 하는데 오래 걸리는건....각자가....잘....하시길....
다음은 코드 입니다.
아래 두 함수는 커넥션 및 결과를 받아 뿌릴 수 있는 내용입니다.
private SshClient Connect_SSH(string host, int port, string user, string passwd) { try { SshClient cSSH = new SshClient(host, port, user, passwd); cSSH.ConnectionInfo.Timeout = TimeSpan.FromSeconds(120); cSSH.Connect(); return cSSH; } catch (Exception ex) { label5.Text = "Status : Error"; return null; Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } private void recvCommSSHData() { while (true) { try { if (Command_sShell != null && Command_sShell.DataAvailable) { String strData = Command_sShell.Read(); appendTextBoxInThread(textBox5, strData); } } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } Thread.Sleep(200); } }
아래는 실제 이벤트 처리 부분이며 해당 코드로 실제 커넥션 후 스레드 동작까지를 사용합니다.
cSSH_Command.CreateShellStream("vt100", 80, 60, 800, 600, 65536) 이 부분은 저도 찾아 보진 않았지만 실제 SSH 통신을 위한 설정이라고만 기억하고 있습니다.
한번쯤 해당 내용을 찾아봐야 할거 같네요
if (cSSH_Command == null) { cSSH_Command = Connect_SSH(접속지 IP 또는 도메인, 포트, Login_ID, Login_PW); Command_sShell = cSSH_Command.CreateShellStream("vt100", 80, 60, 800, 600, 65536); if (cSSH_Command.IsConnected) { label5.Text = "Status : Connected"; Command_thread = new Thread(() => recvCommSSHData()); Command_thread.IsBackground = true; Command_thread.Start(); } }
위와 같이 작업을 하게 되면 마무리가 되며 기본적은 커멘드를 입력 하여 사용 할 수 있는 SSH 환경이 마무리 됩니다.
아래는 직접 만든 모니터링 툴이며 sFTP를 통하여 폴더에 지정된 폴더에 파일을 업로드 할 수 있도록 만들었습니다.
톰캣이 총 3개가 구동이 되다 보니 프로그래스 바 하나가 왔다리 갔다리 하긴 하지만......
아직 Thread를 사용하는데에 익숙치 않지만 공부를 더 해야겠어요 !!