Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일

Bitvise SSH Client의 인증서 모드에서 자동 로그인 방법

다음과 같이 개인키를 이용한 SSH Client로 접속하는 경우,

bitvise_autologin_1.png

반드시 "Passphrase"를 직접, 매번 입력해야만 합니다. 문제는, 저 값이 저장이 안 된다는 점인데요, 음... 그동안 참고 계속 입력했는데 오늘은 문득 너무 귀찮다는 생각이 들었습니다. ^^ 그래서 검색한 결과 stnlc.exe가 있다는 것을 새롭게 알았습니다.

C:\Program Files (x86)\Bitvise SSH Client> stnlc
Bitvise SSH Client 7.41 - stnlc, a command line SSH tunnel client
Copyright (C) 2000-2018 by Bitvise Limited.

ERROR: Missing host or -profile parameter.

USAGE:
stnlc [username@]host[:port] OR -profile=file [-host=host] [-port=port] [-obfs=y|n] [-obfsKw=keyword] [-spn=SPN]
      [-gkx=y|n] [-gkxDlg=y|n]
      [-user=username] [-gka] [-gma [-krb OR -ntlm] [-gmaDlg]] [-pk=location [-pp=passphrase]] [-pw=password
      [-kbdiFallback=y|n]] [-pwKbdi=password] [-kbdi [-sub=submethods]]
      [-unat=y|n] [-trustLsp=y|n]
      [-encr=list] [-mac=list] [-cmpr=list] [-kex=list] [-hkey=list] [-ka=y|n] [-kre=y|n]
      [-noRegistry OR -baseRegistry=registry-key]
      [-proxy=y|n [-proxyType=type] -proxyServer=server [-proxyPort=port] [-proxyUsername=username
      [-proxyPassword=password]] [-proxyResolveLocally=y|n]]
      [-hostKeyFp=fingerprints] [-hostKeyFile=file]
      [-keypairFile=file [-keypairPassphrase=passphrase]]
      [-traceLog] [-flowDebugFile=file]
      [-title=title]
      [-ftpBridge=y|n] [-ftpListIntf=interface] [-ftpListPort=port] [-ftpPassword=password] [-ftpPasvPortStart=port]
      [-ftpPasvPortEnd=port] [-sftpNewline=auto|crlf|lf|cr] [-sftpStartDir=sftp-path] [-sftpPipelineSize=kbytes]
      [-proxyFwding=y|n] [-proxyListInt=interface] [-proxyListPort=port] [-proxyBindIp4Intf=ip4-interface]
      [-proxyBindIp6Intf=ip6-interface] [-proxyPublicIp4=ip4-address] [-proxyPublicIp6=ip6-address]
      [-c2s=rules OR -c2sFile=file-path] [-c2sAccept=y|n]
      [-s2c=rules OR -s2cFile=file-path] [-s2cAccept=y|n]

To learn more about stnlc, try:
  stnlc -help-params   (display help for parameters in general)
  stnlc -help-<param>  (display help for a particular parameter)
  stnlc -help-examples (display examples)
  stnlc -help-codes    (display return codes)

가령, "c:\temp\ssh_client_profile.tlp" 경로에 저장한 파일의 "Profile 1"로 설정한 경우 passphrase가 0000이라면 다음과 같이 명령행에서 입력하면 자동으로 로그인까지 이어집니다.

stnlc -profile=c:\temp\ssh_client_profile.tlp -pk="Profile 1" -pp=0000

그런데, 저렇게 대놓고 passphrase를 적어 놓은 것을 사용하려니 너무 허술합니다. Passphrase를 DPAPI를 이용해,

Protected?Data  Class 
; https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.protecteddata?view=netframework-4.7.2

암호화해서 파일에 저장한 다음 이를 읽어서 실행해 주는 다음과 같은 간단한 프로그램을 윈도우 레지스트리의 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"에 등록하는 것이 쪼끔 더 안전할 수 있겠습니다. ^^

using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace BitviseAutoLogin
{
    class Program
    {
        static byte[] entropy = { ...암호화했을 때 사용한 값을 그대로 사용... };

        static void Main(string[] args)
        {
            string passphrase = GetKey();

            string tlpPath = @"c:\temp\ssh_client_profile.tlp";
            string profileKey = "Profile 1";

            ProcessStartInfo psi = new ProcessStartInfo();
            psi.Arguments =
                string.Format("-profile={0} -pk=\"{1}\" -pp={2}", tlpPath, profileKey, passphrase);
            psi.FileName = @"C:\Program Files (x86)\Bitvise SSH Client\stnlc.exe";
            Process.Start(psi);
        }

        private static string GetKey()
        {
            string text = File.ReadAllText("c:\\temp\\passphrase.txt"); // 현재 사용자에게만 Read 권한이 주어진 파일
            byte [] buf = Convert.FromBase64String(text);
            byte [] decryped = ProtectedData.Unprotect(buf, entropy, DataProtectionScope.CurrentUser);

            return Encoding.Unicode.GetString(decryped);
        }
    }
}

(첨부 파일은 이 글의 예제 프로젝트를 포함합니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 10/16/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
12227정성태6/12/20203283오류 유형: 616. Visual Studio의 느린 업데이트 속도에 대한 원인 분석 [5]
12226정성태6/19/2020498개발 환경 구성: 493. OpenVPN의 네트워크 구성파일 다운로드1
12225정성태6/11/2020521개발 환경 구성: 492. 윈도우에 OpenVPN 설치 - 클라이언트 측 구성
12224정성태6/11/20201066개발 환경 구성: 491. 윈도우에 OpenVPN 설치 - 서버 측 구성
12223정성태6/9/2020695.NET Framework: 908. C# - Source Generator 소개 [3]파일 다운로드1
12222정성태6/3/2020336VS.NET IDE: 146. error information: "CryptQueryObject" (-2147024893/0x80070003)
12221정성태9/24/2020349Windows: 170. 비어 있지 않은 디렉터리로 symbolic link(junction) 연결하는 방법
12220정성태6/3/2020373.NET Framework: 907. C# DLL로부터 TLB 및 C/C++ 헤더 파일(TLH)을 생성하는 방법
12219정성태6/1/2020583.NET Framework: 906. C# - lock (this), lock (typeof(...))를 사용하면 안 되는 이유파일 다운로드1
12218정성태5/31/2020545.NET Framework: 905. C# - DirectX 게임 클라이언트 실행 중 키보드 입력을 감지하는 방법 [1]
12217정성태5/24/2020363오류 유형: 615. Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
12216정성태5/15/2020546.NET Framework: 904. USB/IP PROJECT를 이용해 C#으로 USB Keyboard 가상 장치 만들기
12215정성태5/12/20201368개발 환경 구성: 490. C# - (Wireshark의) USBPcap을 이용한 USB 패킷 모니터링파일 다운로드1
12214정성태5/5/2020453개발 환경 구성: 489. 정식 인증서가 있는 경우 Device Driver 서명하는 방법 (2) - UEFI/SecureBoot
12213정성태5/3/2020725개발 환경 구성: 488. (코드로 가상 USB 장치를 만들 수 있는) USB/IP PROJECT 소개
12212정성태5/1/2020398개발 환경 구성: 487. UEFI / Secure Boot 상태인지 확인하는 방법
12211정성태4/27/2020568개발 환경 구성: 486. WSL에서 Makefile로 공개된 리눅스 환경의 C/C++ 소스 코드 빌드
12210정성태4/20/2020787.NET Framework: 903. .NET Framework의 Strong-named 어셈블리 바인딩 (1) - app.config을 이용한 바인딩 리디렉션 [1]파일 다운로드1
12209정성태4/13/2020466오류 유형: 614. 리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우 (2)
12208정성태4/12/2020569Linux: 29. 리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우
12207정성태4/2/2020539스크립트: 19. Windows PowerShell의 NonInteractive 모드
12206정성태4/2/2020633오류 유형: 613. 파일 잠금이 바로 안 풀린다면? - The process cannot access the file '...' because it is being used by another process.
12205정성태4/2/2020496스크립트: 18. Powershell에서는 cmd.exe의 명령어를 지원하진 않습니다.
12204정성태4/1/2020423스크립트: 17. Powershell 명령어에 ';' (semi-colon) 문자가 포함된 경우
12203정성태3/18/2020752오류 유형: 612. warning: 'C:\ProgramData/Git/config' has a dubious owner: '...'.
12202정성태3/18/2020982개발 환경 구성: 486. .NET Framework 프로젝트를 위한 GitLab CI/CD Runner 구성
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...