SSH Key란?
서버에 접속 할 때 비밀번호 대신 key를 제출하는 방식이다.
SSH Key는 언제 사용하는가?
- 비밀번호 보다 높은 수준의 보안을 필요로 할 때
- 로그인 없이 자동으로 서버에 접속 할 때
SSH Key는 공개키(public key)와 비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개키와 비공개키가 만들어진다. 이 중에 비공개키는 로컬 머신에 위치해야 하고, 공개키는 리모트 머신에 위치해야 한다. (로컬 머신은 SSH Client, 원격 머신은 SSH Server가 설치된 컴퓨터를 의미한다.)
SSH Key를 통해서 서버에 접속 할 때 Unix 계열(리눅스, 맥)에서는 ssh-keygen이라는 프로그램을 이용하면 된다
윈도우 에서 맥 OS 에 접근하는 상황
윈도우 에서 ssh 인증서 생성
ssh-keygen -t rsa
- 키를 저장할 경로 (기본값: /Users/.ssh/id_rsa)
- passphrase 입력 (추가로 사용할 암호, 기본값 없음)
- passphrase 확인
Mac설정
ssh 접속할 때, 비밀번호 없이 접근하게 하려면 /etc/ssh/sshd_config 에서
PubkeyAuthentication yes
PasswordAuthentication no
해당 옵션을 입력해 주면 되었는데
Monetery 버전에서만 다르게
sshd_config.d 안에있는 100-macos.conf 파일에
UsePam no
PasswordQuthentication no
를 입력해주어야 한다고 한다.
https://rachelbythebay.com/w/2021/10/27/macssh/
그리고 윈도우 에서 만들었던 인증서
rsa - 개인키 / rsa.pub 공개키
rsa.pub 값을 복사하여
맥 /Users/사용자/.ssh/authorized_keys 파일에 append 해야 한다.
없으면 만들고, 있으면 덮어 씌우는게아니라 append 해야한다. (덮어 씌우면 기존에 있던 공개키들 다 날라 간다.)
그 다음에 맥에서 데몬을 재로드 한 뒤
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
데몬 (daemon) - 멀티태스킹 OS 에서, 사용자가 직접 제어하지 않고 ‘백그라운드 프로세스’ 로 실행되는 프로그램
id_rsa | private key, 타인에게 노출되면 안된다. |
id_rsa.pub | public key, 접속하려는 리모트 머신의 authorized_keys에 입력한다. |
authorized_keys | authorized_keys 파일은 public key 인증을 사용하여 원격 호스트에 로그인 하도록 허용된 사용자를 인증하는 데 사용되는 키를 저장 |
윈도우 에서
ssh -i [비밀키 경로] [로그인 할 사용자]@[서버주소]
i 옵션 - RSA 인증을 위한 비밀 키를 읽어 올 아이덴티티 파일을 선택

- 클라이언트 에서 ssh-keygen 으로 개인키(id_rsa) / 공개키(id_rsa.pub) 생성
- 클라이언트 에서 생성된 공개키 를 서버에 append (authorized_keys)
- 클라이언트가 서버에 접속(=자동 로그인)을 시도하면 서버는 클라이언트에게 random key를 준다.
- 클라이언트는 개인키가 있는지 확인하고 있으면 그것을 이용해서 random key를 암호화
- 암호화된 결과를 서버에게 다시 전송하고 서버는 암호화된 random key를 받아서 authorized_keys 안에 담긴 공개를 통해 복호화를 한다.
- random key가 복호화가 되고 그 복호화된 random key가 처음 클라이언트에게 보낸 random key와 동일한지 확인하고 자동 로그인을 진행함.
젠킨스에서 ssh 사용하기
Jenkins 관리 > 플러그인 관리 > ssh agent 플러그인이 설치되어 있어야 한다.
그리고 Credentials 하나를 만들어 Private key 에 클라이언트에서 만들 개인키 (id_rsa)를 복붙한다.
파이프라인에서는 다음과 같이 사용한다.
stages {
stage ('ssh Agent Test') {
steps {
sshagent(credentials: ['MacOS-ssh-Jenkins']){
sh """
ls
"""
}
}
}
}
만약 해당 오류가 발생하면 플러그인이 아닌 다른 ssh-agent 를 사용하고 있는 것이다.
[ssh-agent] Could not find a suitable ssh-agent provider.
ssh agent 플러그인이 깃허브 오픈소스인지는 모르겠지만 Git 폴더에 있는 ssh.exe를 사용해야 한다.
그리고 환경변수를 추가할 때 반드시 Git\usr\bin 이 OpenSSH 보다 위에 있어야 먼저 인식된다.

참고로 ssh 로 언리얼 빌드를 하고 있었는데 맥OS 가 공유폴더에 접근 권한을 가지고 있었는데도 젠킨스 ssh agent 에서는 접근하지 못하였다.
전체 디스크 접근 권한에 해당 파일 권한을 주면 공유폴더에 접근 가능하다.
젠킨스에서 ssh 로 빌드할 때 codesign error (서명되지 않는) 문제
맥 (GUI) 에서 직접 패키징 할 경우 잘 서명 하는데 (RunUAT.sh BuildCookRun)
jenkins (ssh) 를 통한 명령을 통해 빌드 할 때 서명이 되지않는 에러가 발생
Warning: unable to build chain to self-signed root for signer "[인증서]"
[프로젝트경로]/Binaries/IOS/Payload/Moon.app: errSecInternalComponent
ssh 접근 시 키체인 권한이 없어 발생하는 문제
~/Library/Keychains/login.keychain-db 이 키체인은 Mac OS에서 사용자가 자신의 계정에 로그인할 때 자동으로 잠금 해제되는 사용자의 로그인 키체인이 포함되어 있습니다.
사용자 계정이 생성될 때 생성되며 일반적으로 해당 암호는 로그인 암호와 동기화됩니다.
로그인 암호를 변경하거나 키체인 액세스 유틸리티를 사용할 때 암호가 변경됩니다.
→ ssh 로 접근 시 매번 키체인의 권한을 흭득하는 처리를 해야 함
security unlock-keychain ~/Library/Keychains/login.keychain-db
Sierra와 함께 변경된 키체인 확장자는 .keychain-db - (기존 .keychain)
이 과정을 하지 않으면 다음 명령을 실행할 때 "User interaction is not allowed."라는 오류가 발생하거나 빌드할 때 키체인 암호를 묻는 팝업이 나타나지 않는다.
.p12 에서 인증서 가져오고 옵션을 codesign을 통해 액세스 권한 부여 (맥OS 에서 해도 됨)
security import <개인키 경로> -k ~/Library/Keychains/login.keychain-db -p <비밀번호> -T /usr/bin/codesign
개인 키를 키 체인으로 가져온다.
-T /usr/bin/codesign로 비밀키에 액세스 할 수 있는 프로그램을 건네줍니다.
xcodebuild로 빌드할 때, 내부에서는 를 /usr/bin/codesign이용하고 있는 것 같기 때문에 이 프로그램에 액세스 권한을 준다.
이 import는 한 번만 실행해 줘도 된다.
예시)
sshagent(credentials: ["${MAC_SSH_CREDENTIALS}"]) {
sh """
ssh -o StrictHostKeyChecking=no ${MACUSER}@${MACREMOTEIP} '
security unlock-keychain -p <계정 암호> ~/Library/Keychains/login.keychain-db
${MAC_WORKSPACE_DIRECTORY}/BatchFiles/RunProjectPackage.sh
... (생략)
'
"""
}
security show-keychain-info ~/Library/Keychains/login.keychain-db | 키체인 권한 확인 |
security unlock-keychain ~/Library/Keychains/login.keychain-db | 키체인 언락 |
security import <p12파일경로> -k ~/Library/Keychains/login.keychain-db -P <비밀번호> -T /usr/bin/codesign | security 도구를 이용하여 .p12 파일 가져오기 쉘에 따라 다른것 같은데 zsh 경우 비밀번호 따옴표로 묶어야 인식 하는 듯 |
security set-keychain-settings ~/Library/Keychains/login.keychain-db | 자동 잠금 시간 제한 비활성화 |
security find-identity -v -p codesigning | 서명 id 리스트 |
codesign -s "<서명ID>" -f <서명할 App 경로> | 코드 사인 테스트 |
'언리얼 > Mac | iOS' 카테고리의 다른 글
Mac 엔진 5.2 -> 5.3 마이그레이션 발생 문제 (2) | 2024.01.23 |
---|---|
TestFlight (1) | 2024.01.09 |
Google Protobuf 언리얼에 적용시키기 (Mac / IOS) (0) | 2023.12.22 |
언리얼 관련 Mac / IOS 삽질 (2) | 2023.06.14 |
Apple Developer (0) | 2023.05.28 |