[카테고리:] 미분류

  • Git Push 시 SSH 비밀번호

    Git을 사용하다 보면 git pull은 잘 되는데 git push만 할 때마다 SSH 키의 비밀번호를 반복해서 물어보는 경우가 있습니다. 이 문제의 원인과 해결 방법을 알아보겠습니다.

    문제 상황

    $ git push
    Enter passphrase for key '/root/.ssh/id_ed25519': 
    Enter passphrase for key '/root/.ssh/id_ed25519':
    Enter passphrase for key '/root/.ssh/id_ed25519':
    

    매번 비밀번호를 입력해야 하고, 심지어 올바른 비밀번호를 입력해도 계속 물어보는 경우가 발생합니다.

    원인

    SSH 키가 SSH agent에 등록되지 않았기 때문입니다. SSH agent는 한 번 인증한 키를 메모리에 보관하여 재사용하는 역할을 하는데, 키가 agent에 추가되지 않으면 매번 비밀번호를 입력해야 합니다.

    해결 방법

    1. 즉시 해결 (임시)

    SSH agent를 시작하고 키를 추가합니다:

    # SSH agent 시작
    eval "$(ssh-agent -s)"
    
    # SSH 키 추가
    ssh-add ~/.ssh/id_ed25519
    

    비밀번호를 한 번만 입력하면, 이후 현재 세션에서는 비밀번호를 묻지 않습니다.

    확인:

    # 등록된 키 확인
    ssh-add -l
    
    # 테스트
    git push
    

    2. 영구적 해결 – SSH Config 설정 (권장)

    서버를 재시작해도 자동으로 적용되도록 SSH 설정 파일을 수정합니다.

    # SSH config 파일 생성/편집
    nano ~/.ssh/config
    

    다음 내용을 추가:

    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519
        AddKeysToAgent yes
    
    Host gitlab.com
        HostName gitlab.com
        User git
        IdentityFile ~/.ssh/id_ed25519
        AddKeysToAgent yes
    

    파일 권한 설정:

    chmod 600 ~/.ssh/config
    

    이제 git 명령 실행 시 자동으로 SSH agent에 키가 추가됩니다.

    3. 영구적 해결 – 자동 시작 스크립트

    .bashrc 또는 .zshrc에 자동 실행 코드를 추가하는 방법입니다.

    nano ~/.bashrc
    

    파일 끝에 다음 내용 추가:

    # SSH agent 자동 시작 및 키 추가
    if [ -z "$SSH_AUTH_SOCK" ]; then
        eval "$(ssh-agent -s)" > /dev/null
        ssh-add ~/.ssh/id_ed25519 2>/dev/null
    fi
    

    저장 후 적용:

    source ~/.bashrc
    

    추가 팁

    Git Pull은 되는데 Push만 안 되는 경우

    먼저 원격 저장소 URL을 확인해보세요:

    git remote -v
    

    HTTPS와 SSH가 혼용된 경우:

    origin  https://github.com/username/repo.git (fetch)
    origin  git@github.com:username/repo.git (push)
    

    SSH로 통일:

    git remote set-url origin git@github.com:username/repo.git
    

    GitHub SSH 연결 테스트

    SSH 키가 제대로 설정되었는지 확인:

    ssh -T git@github.com
    

    성공 시 다음 메시지가 출력됩니다:

    Hi username! You've successfully authenticated, but GitHub does not provide shell access.
    

    여러 개의 SSH 키 사용하는 경우

    여러 계정을 사용한다면 ~/.ssh/config에서 각각 설정할 수 있습니다:

    # 개인 GitHub
    Host github.com-personal
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519_personal
        AddKeysToAgent yes
    
    # 회사 GitHub
    Host github.com-work
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519_work
        AddKeysToAgent yes
    

    저장소 클론 시:

    git clone git@github.com-personal:username/repo.git
    

    문제 해결이 안 될 때

    상세한 디버깅 정보를 확인:

    GIT_SSH_COMMAND="ssh -vvv" git push
    

    SSH 연결 과정에서 발생하는 모든 로그를 볼 수 있어 문제를 정확히 파악할 수 있습니다.

    마무리

    SSH 키 비밀번호를 매번 입력하는 문제는 SSH agent 설정으로 간단히 해결할 수 있습니다. SSH config 파일을 설정하는 방법이 가장 깔끔하고 영구적인 해결책이므로 추천드립니다.

    보안을 위해서는 SSH 키에 비밀번호를 설정하되, SSH agent를 활용해 편의성도 함께 챙기는 것이 좋습니다.