SSH 에이전트 전달을 사용하여 서버에 간단하게 배포할 수 있습니다. 서버에 키(암호 없음)를 두지 않고 로컬 SSH 키를 사용할 수 있습니다.
GitHub와 상호 작용하도록 SSH 키를 이미 설정한 경우 아마 에 대해 잘 알고 있을 것입니다. 백그라운드에서 실행되고 키를 메모리에 로드된 상태로 유지하는 프로그램이므로 키를 사용해야 할 때마다 암호를 입력할 필요가 없습니다. 유용한 점은 이미 서버에서 실행 중인 것처럼 서버가 로컬 에 액세스하도록 선택할 수 있다는 것입니다. 이는 마치 친구의 컴퓨터를 사용할 수 있도록 친구에게 암호를 입력해 달라고 요청하는 것과 같습니다.
SSH 에이전트 전달에 대한 자세한 설명은 Steve Friedl의 기술 팁 가이드를 확인하세요.
SSH 에이전트 전달 설정
사용자 고유의 SSH 키가 설정되고 작동하는지 확인합니다. 아직 이 작업을 수행하지 않은 경우 SSH 키 생성에 대한 가이드 를 사용할 수 있습니다.
터미널에 을 입력하여 로컬 키가 작동하는지 테스트할 수 있습니다.
$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.
우리는 순조롭게 시작했습니다. 에이전트가 서버로 전달되도록 SSH를 설정해 보겠습니다.
-
원하는 텍스트 편집기를 사용하여 에서 파일을 엽니다. 이 파일이 존재하지 않으면 터미널에 을(를) 입력하여 만들 수 있습니다.
-
다음 텍스트를 파일에 입력하여, 귀하의 서버의 도메인 이름 또는 IP로 대체하십시오.
Host example.com ForwardAgent yes
경고
이 설정을 모든 SSH 연결에 적용하기 위해 와일드카드를 사용하려는 경우가 있습니다. SSH로 연결하는 모든 서버와 로컬 SSH 키를 공유하게 되므로 이는 좋은 방법이 아닙니다. 그들이 키에 직접 액세스할 수는 없지만, 연결이 설정되는 동안 귀하 대신 키를 사용할 수 있습니다. 신뢰하고, 에이전트 전달에 사용하려는 서버만 추가해야 합니다.
SSH 에이전트 전달 테스트
에이전트 전달이 서버에서 작동하는지 테스트하려면 서버에 SSH로 연결하고 을 한 번 실행힐 수 있습니다. 모두 문제 없이 실행되면 로컬에서 했던 것과 동일한 프롬프트가 다시 표시됩니다.
로컬 키가 사용 중인지 확실하지 않은 경우 서버에서 변수를 검사할 수도 있습니다.
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453
변수가 설정되지 않은 경우 에이전트 전달이 작동하지 않음을 의미합니다.
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).
SSH 에이전트 전달 문제 해결
다음은 SSH 에이전트 전달 문제를 해결할 때 유의해야 할 몇 가지 사항입니다.
코드를 체크 아웃하려면 SSH URL을 사용해야 합니다.
SSH 전달은 HTTP(s) URL이 아니라 SSH URL에서만 작동합니다. 서버에서 파일을 확인하고 URL이 아래와 같은 SSH 스타일 URL인지 확인합니다.
[remote "origin"]
url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
fetch = +refs/heads/*:refs/remotes/origin/*
SSH 키는 로컬로 작동해야 합니다.
에이전트 전달을 통해 키를 작동하려면 키가 먼저 로컬에서 작동해야 합니다. SSH 키 생성에 대한 가이드는 SSH 키를 로컬로 설정하는 데 유용할 수 있습니다.
시스템에서 SSH 에이전트 전달을 허용해야 합니다.
경우에 따라 시스템 구성은 SSH 에이전트 전달을 허용하지 않습니다. 터미널에 다음 명령을 입력하여 시스템 구성 파일이 사용 중인지 확인할 수 있습니다.
$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt
위의 예제에서 파일 가 먼저 로드된 다음 를 읽습니다. 다음 명령을 실행하여 이 파일이 옵션을 재정의하는지 검사할 수 있습니다.
$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
> SendEnv LANG LC_*
> ForwardAgent no
이 예제에서 파일은 특히 를 나타내는데, 이는 에이전트 전달을 차단하는 방법입니다. 파일에서 이 줄을 삭제하면 에이전트 전달이 다시 한 번 작동하게 됩니다.
서버에서 인바운드 연결에 대한 SSH 에이전트 전달을 허용해야 합니다.
서버에서 에이전트 전달이 차단될 수도 있습니다. 서버에 SSH로 연결하고 를 실행하여 에이전트 전달이 허용되는지 확인할 수 있습니다. 이 명령의 출력은 이 설정되었음을 나타내야 합니다.
귀하의 로컬 서버가 실행 중이어야 합니다.
대부분의 컴퓨터에서 운영 체제가 자동으로 시작됩니다. 그러나 Windows 이 작업을 수동으로 수행해야 합니다. Git Bash를 열 때마다 를 시작하는 방법에 대한 가이드가 있습니다.
가 컴퓨터에서 실행 중인지 확인하려면 터미널에 다음 명령을 입력합니다.
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners
당신의 키는 사용 가능해야 합니다.
다음 명령을 실행하여 키가 에 표시되는지 확인할 수 있습니다.
ssh-add -L
명령을 통해 사용할 수 있는 ID가 없다고 표시되면 키를 추가해야 합니다.
ssh-add YOUR-KEY
팁
macOS에서 재부팅하는 동안 가 다시 시작되면 이 키를 “잊어버리게” 됩니다. 하지만 다음 명령을 사용하여 SSH 키를 키 집합으로 가져올 수 있습니다.
ssh-add --apple-use-keychain YOUR-KEY
참고 항목
--apple-use-keychain 옵션은 ssh-에이전트에 SSH 키를 추가할 때 암호를 키 체인에 저장합니다. 키에 암호를 추가하지 않기로 선택한 경우 --apple-use-keychain 옵션 없이 명령을 실행합니다.
--apple-use-keychain 옵션은 ssh-add의 Apple 표준 버전에 있습니다. Monterey(12.0) 이전의 macOS 버전에서 --apple-use-keychain 및 --apple-load-keychain 플래그는 -K와 -A 구문을 각각 사용했습니다.
ssh-add의 Apple 표준 버전이 설치치되어 있지 않은 경우, 오류가 발생할 수 있습니다. 자세한 내용은 오류: ssh-add: 유효하지 않은 옵션 -- apple-use-keychain을(를) 참조하세요.
암호를 묻는 메시지가 계속 표시되면, ~/.zshrc 파일(또는 bash용 ~/.bashrc 파일)에 명령을 추가해야 할 수 있습니다.