Visual Studio의 Connection Manager 기능(Remote SSH 관리)을 위한 명령행 도구 - 두 번째 이야기
예전에 아래와 같은 명령 도구를 사용했었는데,
Visual Studio의 Connection Manager 기능(Remote SSH 관리)을 위한 명령행 도구
; https://www.sysnet.pe.kr/2/0/11940
빌드 도구 업데이트 이후,
msbuild 에러 - error NETSDK1005: Assets file '...\project.assets.json' doesn't have a target for '...'.
; https://www.sysnet.pe.kr/2/0/12968
이전에는 성공하던 빌드가 이제는 다음과 같은 오류를 냅니다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Application Type\Linux\1.0\Linux.targets(185,5): error : Could not connect to the remote system. Please verify your connection settings, and that your machine is on the network and reachable. [D:\TestPrj\TestPrj.vcxproj]
도대체 뭐가 잘못된 걸까요? ^^;
정상적으로 빌드가 되는, 비주얼 스튜디오가 설치된 곳의 store.xml과 비교했더니, xml에 필드 하나가 더 추가되었습니다.
<?xml version="1.0" encoding="utf-8"?>
<store hash="51970831b3fef09afccf5...[생략]...927cf8848375f08fb7f27620e">
<entries>
<entry id="409410665">
<hostname>192.168.100.50</hostname>
<port>22</port>
<dateAdded>목-13-6 2019 10:50:22</dateAdded>
<fingerprint />
<credentials>
<lastsuccessful>월-1-1 0001 00:00:00</lastsuccessful>
<lastfailed>월-1-1 0001 00:00:00</lastfailed>
<lastupdated>월-1-1 0001 00:00:00</lastupdated>
<username>testusr</username>
<authenticationMethod>Password</authenticationMethod>
<password>AQAAANCMn...[생략]...xWSNYXloQqXTA==</password>
</credentials>
<properties />
</entry>
</entries>
</store>
왠지 저것이 원인인 것 같습니다. 그래서 최신 버전의 liblinux를 참조했더니, FingerPrint 속성 관련해서 업데이트하는 비동기 메서드(UpdateFingerprintAsync)도 추가되었습니다. 그래서, 위와 같은 상황에서 다음과 같이 fingerprint를 업데이트하는 코드를 수행하면,
int storeId = 409410665;
string fingerprint = "SHA256:5HAse+O8MTh4npfJmsUPnDxv1pCI1XEjqOVOFmGk+iI";
store.UpdateFingerprintAsync(storeId, fingerprint, System.Threading.CancellationToken.None);
정상적으로 다시 msbuild가 동작했습니다.
참고로,fingerprint 값은 SSH 연결에서 구하는 값이 그대로 사용됩니다. 따라서 다음과 같이 구할 수 있고,
C:\temp> ssh -o FingerprintHash=sha256 192.168.100.50
The authenticity of host '192.168.100.50 (192.168.100.50)' can't be established.
ECDSA key fingerprint is SHA256:5HAse+O8MTh4npfJmsUPnDxv1pCI1XEjqOVOFmGk+iI.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
저 값을 그대로 UpdateFingerprintAsync 메서드에 전달하면 됩니다.
첨부한 도구는 그래서 다음과 같은 순서로 사용할 수 있습니다.
우선, 비밀번호를 암호화하고,
C:\temp> RemoteSshTool.exe encrypt your_password
AQAAANCMnd8BFdERjH...[생략]...+agXZgnpOhRA==
암호화된 문자열은 적절하게 보관을 하시고, 다음과 같은 명령어를 수행하면 store.xml에 연결 설정이 추가됩니다.
C:\temp> RemoteSshTool.exe add 192.168.100.50 your_user_id AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA//boMAK0a0mC+ddUSdQEWQAA....[생략]...pOhRA==
이 상태에서는 store.xml에 fingerprint 값이 없는데, 이것을 다시 한번 다음의 명령어로 마무리를 합니다.
c:\temp> RemoteSshTool.exe update-fingerprint -1204116193 SHA256:5HAse+O8MTh4npfJmsUPnDxv1pCI1XEjqOVOFmGk+iI
(
첨부 파일은 지난 글에 포함한 RemoteSshTool의 개선된 버전입니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]