많은 사이트에서 서버관련된 IT 종사자들이 SecureCRT를 사용한다.
본인의 전문 분야를 잘하기 위해서는 연관된 분야도 알아야 하는 경우들이 많다.
DBA라면 서버의 OS, Shell Script, 스토리지, 네트워크, vi(vim) editor, WAS 등이 되겠다.
그리고 필요한 것이 각종 Tool이다. DBA들이라면 Toad, Oracle Sql Developer, Orange 등의 Tool이 있을테고 모니터링 솔루션(DPM)으로 엑셈의 MaxGuage, 셀파소프트의 Sherpa등 일 것이다. 관제 솔루션들도 있다. 각 솔루션들마다 많은 기능들이 있어 어느 정도는 익숙하게 다루는게 중요하다.
이와 더불어 ssh로 접속해서 쓰는 Tool은 뭐랄까 공기나 물 같은 존재라고 할 수 있겠다.
항상 쓰면서도 뭔가 더 기능을 공부하면 편하게 쓸수 있을 것 같은데 원래의 일에 집중하다 보면 항상 놓치는 것 같다.
지금 사이트의 경우 편하게 빨리 로그인해서 작업하고 싶은데 매번 구차한 방식으로 로그인을 하고 있다. 구차한 방식으로 하게 된 이유는 보안이란 장벽 때문.
운영 DBA는 보통 100여 대의 DB를 관리한다.
15년쯤 전, 일했던 사이트에서는 우리 팀에서 관리하는 DB가 300여대 였는데 그전부터 누군가가 만들어 놓은 스크립트를 이용해서 로그인을 편하게 했었는데 그때의 기억을 되살려 이번에 자동 로그인 스크립트를 짜보았다.
이번에 SecureCRT를 공부하면서 생각한 것이 정말 대단한 툴이 맞다.
그중에 내부적으로 파이썬(Python)과 VBscript를 이용한 스크립트를 지원한다는 것은 엄청난 기능이라고 생각한다.
SecureCRT에서는 이를 위해서 별도의 'Script' 메뉴가 있으며 여기에 'Run' 메뉴와 'Start Recording Script', 'Stop Recording Script' 메뉴가 존재한다.
나의 경우 SecureCRT에 Session Manager에 100여 대의 DB서버를 등록해 놓았다.
각 서버마다 Logon Actions > Automate Logon을 체크하고 그 아래에 로그인 정보를 셋업해 놓았었다.
서버의 패스워드는 주기적으로 바뀌는데 서버 패스워드 변경은 보안 유지보수 팀에서 따로 진행한다.
패스워드가 변경되면 SecureCRT에서도 변경해야 하므로 우리 팀 막내가 SecureCRT의 100여대의 서버 Property를 들어가 패스워드를 변경한다. 그리고 이 Config를 공유해 왔다.
팀 막내는 전형적인 MZ세대라서... 투덜거리면서 변경한다. 그 모습이 신경 쓰여 조금이라도 도움을 줘야 할 것 같아 아래와 같이 만들게 된 것이다.
파일은 두 개
. vbs script 파일 : CRT_login.vbs 라고 하자
. 서버목록과 로그인 정보를 갖고 있는 파일 : CRT_loginList.sql 라고 하자
방식은 이렇다.
SecureCRT에서 Session Manager에는 아래와 같이 서버들이 등록되어 있다.

그리고 각 서버들의 Property는 아래와 같이 설정했다.
. Automate logon은 체크해제
. Logon script를 체크하고 vbs파일 선택
. Display logon prompts in terminal window 체크

모든 서버들을 동일하게 설정하면 되므로 Session Manager에서 Shift를 누르고 마지막 서버를 누르면 여러 대의 서버들이 선택되고 Property를 선택(Alt + Enter)하면 전체 적용되는 화면이 나와 한번에 변경 할 수 있다.
vbs 파일은 아래와 같으며 동작 방식은 아주 간단하다.
Session Manager에서 선택한 서버의 Label에서 IP를 찾고 그 IP가 서버목록을 정리한 CRT_loginList.sql에 있는지 찾는다.
목록 파일에 있으면 그 옆에 적어 놓은 로그인 정보를 가져와서 crt.Screen.Send로 날리는 것이다.
BVScript 중 case문을 보면 모든 서버들을 case로 나누어 놓았는데 이 스크립트를 작성하기 위해서 한 번은 서버에 접속해서 Recording 해줘야 한다.
Recording 방법은 서버에 접속하기 전 'Start Recording Script'를 눌러 놓고 정상적으로 패스워드를 입력하는 절차로 로그인 해준다. (이때는 Automate Logon, Logon Script 모두 체크하지 않아야 함)
로그인 후 'Stop Recording Script'를 누르면 파일로 저장하게 되며 이 파일을 열어보면 아래 case 문과 거의 같다.
서버마다 약간씩 손을 본 후 아래의 내용에 case로 추가하면 된다.
아래의 스크립트는 crt.Screen Object를 썼기 때문에 모든 서버를 한번은 로그인해서 crt.Screen.WaitForString을 가져와야 하는 구조이다. 서버마다 프롬프트 내용이 다른 경우가 대부분이어서 case문이 계속 늘어 난다. 이걸 사용하지 않고 전부 crt.Session Object를 쓴다면 이 과정이 필요없고 스크립트가 아주 짧아질 것 같은데 그 방법은 알아내지 못했다.
#$language = "VBScript"
#$interface = "1.0"
crt.Screen.Synchronous = True
Sub Main
Dim objFSO, objStream
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objStream = objFSO.OpenTextFile("C:\Users\KCC\Documents\CRT_loginList.sql")
CurrSession = Split(crt.Session.Label, "_")(0)
Do While objStream.AtEndOfStream <> True
strLine = objStream.ReadLine
CommaCNT = Len(strLine) - len(replace(strLine, ",", ""))
If Split(Split(strLine, ",")(0), "_")(0) = CurrSession then
If CommaCNT = 4 then
' HostIP = Split(Split(strLine, ",")(0), "_")(0)
Uname1 = Replace(Split(strLine, ",")(1), " ", "")
Passwd1 = Replace(Split(strLine, ",")(2), " ", "")
UnameR = Replace(Split(strLine, ",")(3), " ", "")
PasswdR = Replace(Split(strLine, ",")(4), " ", "")
Elseif CommaCNT = 2 then
' HostIP = Split(Split(strLine, ",")(0), "_")(0)
Uname1 = Replace(Split(strLine, ",")(1), " ", "")
Passwd1 = Replace(Split(strLine, ",")(2), " ", "")
End if
Exit Do
End if
Loop
objStream.Close
' MsgBox "HostIP ===" & HostIP & "=== CurrSession(0)===" & CurrSession & "==="
Select Case CurrSession
Case "xxx.xx.1.100"
' xxx.xx.1.100_기록관리
crt.Screen.WaitForString "Username: "
crt.Screen.Send Uname1 & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send Passwd1 & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "su - " & chr(13)
crt.Screen.WaitForString "root's Password: "
crt.Screen.Send PasswdR & chr(13)
crt.Screen.WaitForString "[rsdb:root]/>"
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "[rsdb:root]/>"
crt.Screen.Send "su - oracle" & chr(13)
crt.Screen.WaitForString "[rsdb:/app/oracle]$"
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "[rsdb:/app/oracle]$"
crt.Screen.Send "work;cd han;" & chr(13)
Case "xxx.xx.1.101"
' xxx.xx.1.101_그룹포털#1
crt.Screen.WaitForString "Username: "
crt.Screen.Send Uname1 & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send Passwd1 & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "su -" & chr(13)
crt.Screen.WaitForString ": "
crt.Screen.Send PasswdR & chr(13)
crt.Screen.WaitForString "root@krbsdb5 # "
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "root@krbsdb5 # "
crt.Screen.Send "su - oracle" & chr(13)
crt.Screen.WaitForString "EPKDB1:/oracle/app/oracle>"
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "EPKDB1:/oracle/app/oracle>"
crt.Screen.Send "work;cd han;" & chr(13)
Case "xxx.xx.1.102"
' xxx.xx.1.102_그룹포털#2
crt.Screen.WaitForString "Username: "
crt.Screen.Send Uname1 & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send Passwd1 & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "su -" & chr(13)
crt.Screen.WaitForString ": "
crt.Screen.Send PasswdR & chr(13)
crt.Screen.WaitForString "root@krbsdb5 # "
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "root@krbsdb5 # "
crt.Screen.Send "su - oracle" & chr(13)
crt.Screen.WaitForString "EPKDB2:/oracle/app/oracle>"
crt.Screen.Send "TMOUT=0" & chr(13)
crt.Screen.WaitForString "EPKDB2:/oracle/app/oracle>"
crt.Screen.Send "work;cd han;" & chr(13)
Case "xxx.xx.1.103"
' xxx.xx.1.103_sherpa_LOGMS
crt.Screen.WaitForString "Username: "
crt.Screen.Send Uname1 & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send Passwd1 & chr(13)
crt.Screen.WaitForString "[sherpa@sherpamgr10 ~]$ "
crt.Screen.Send "TMOUT=0" & chr(13)
Case Else
MsgBox "No Host to match!"
Exit Sub
End Select
End Sub
아래 파일이 CRT_loginList.sql 이다.
csv 파일 형태이며 각 필드 구분자가 콤마(,) 이므로 특히 서버명에 콤마가 들어가면 안되겠다.
첫번째 항목 IP를 포함한 서버명
두번째 항목 첫 로그인 os계정
세번째 항목 첫 로그인 os 패스워드
네번째 항목 root os계정(root로 모두 동일...)
다섯째 항목 root os 패스워드
넷째, 다섯째 항목은 없는 경우들이 많으니 아래의 sherpa 서버처럼 3개 항목으로 구성해도 된다.
xxx.xx.1.100_기록관리, mon, monPasswd , root, rootPasswd
xxx.xx.1.101_그룹포털#1, mon, monPasswd , root, rootPasswd
xxx.xx.1.102_그룹포털#2, mon, monPasswd , root, rootPasswd
xxx.xx.1.103_sherpa_LOGMS, sherpa, sherpaPasswd
이번에 SecureCRT를 약간 더 공부하면서 Vandyke사의 유튜브 채널이 많이 도움이 되었고 정말 많은 기능이 있다는 것을 알았다.
채널을 여기에 공유한다.
https://www.youtube.com/@vandykesoftware/videos
vandykesoftware
VanDyke Software offers rock-solid applications for secure remote access, file transfer, and system administration, backed by expert customer support. VanDyke Software products include VShell®, SecureCRT®, and SecureFX®.
www.youtube.com
이제 Session Manager에서 각 서버들을 클릭하면 자동으로 로그인 되는 것 까지 했다.
남은 것은 제목에 쓴 것처럼 SecureCRT auto login vbs script for multiple servers(여러대 자동 로그인)을 하면 끝난다.

여러대를 동시에 접속하기 위해서는 몇가지 방법이 있는데 SecureCRT는 간단하게 Session Manager에서 서버를 선택후 오른쪽 버튼을 누르면 나오는 'Create Desktop Shortcut' (Ctrl + Alt + E) 기능을 제공하고 있어 이것을 이용하면 된다.
위에 보이는 것 처럼 평소 3대의 서버에 로그인하고 세션은 5개를 열어야 한다면 폴더를 만들어 주고 이미 만들어 놓은 세션 서버들을 폴더에 복사/붙여넣기 한다.
이 폴더의 서버들도 동일하게 logon script로 로그인하는 방식으로 동작할 것이다.
원하는 서버들을 넣은 후 폴더에서 오른쪽 버튼을 눌러 'Create Desktop Shortcut'을 누르면 이 폴더의 단축아이콘이 만들어 진다.

만들어진 단축아이콘을 클릭하면 SecureCRT가 뜨면서 5개의 세션이 동시에 열리고 자동 로그인까지 된다.
끝.
'IT' 카테고리의 다른 글
엑셀 VBA로 도서 관리 : ISBN이용 국립중앙도서관 OpenAPI (0) | 2025.03.15 |
---|---|
운영DBA가 보는 지연된 블록 클린아웃(Delayed Block Cleanout) (0) | 2024.08.05 |
구글 플레이게임 나이 제한 지났다. 13세 또는 14세 ?? (2) | 2022.11.20 |
DBA(Database Administrator)를 잘하려면. 운영DBA의 조언 (0) | 2022.05.30 |
Oracle Dev Gym 소개 (0) | 2022.05.14 |