2024/08에 해당하는 글 1

git push 400 에러 발생 시, ssh 로 연결 해결방안

IT_Engineer|2024. 8. 16. 12:32
728x90

파일을 대량으로 올리는 중에, 

https가 버거워하며 400 에러를 발생시켰다.

 

HTTP 400 오류여러 가지 원인으로 인해 원격 서버와의 통신이 중단되었음을 나타내는데, 보통 클라이언트의 잘못된 요청이나 서버에서 발생한 문제로 인해 요청이 거부되었음을 의미한다. 대부분 데이터의 크기가 문제인듯하다.

 

Enumerating objects: 708, done.
Counting objects: 100% (708/708), done.
Delta compression using up to 8 threads
Compressing objects: 100% (576/576), done.
error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet
Writing objects: 100% (707/707), 12.06 MiB | 12.66 MiB/s, done.
Total 707 (delta 226), reused 179 (delta 84), pack-reused 0
fatal: the remote end hung up unexpectedly
Everything up-to-date

 

주된 에러 원인

  1. 푸시하려는 데이터의 크기:
    • 푸시하려는 데이터가 너무 커서 Git 서버가 이를 처리하지 못하는 경우,
      특히 대용량의 바이너리 파일이나 여러 개의 큰 파일을 한 번에 푸시할 때 발생
  2. 네트워크 문제:
    • 네트워크가 불안정하거나, 연결 시간이 초과되었을 때 발생
  3. Git 서버 설정 문제:
    • 원격 Git 서버에서 허용하는 요청 크기 제한이나 타임아웃 설정에 의해 발생

 

해결 방법

1. 푸시 데이터의 크기 줄이기

근원적인 문제를 해결하는 건데, 불필요한 대용량 파일의 경우 올리지 않는 방법이다.

스테이징 된 업로드 파일 중에 불필요한 대용량 파일들을 지우는 방식이다.

  • git rm --cached {제거하려는 파일}

2. HTTP 버퍼 크기 증가

푸시 데이터의 크기가 큰 경우, Git의 HTTP 버퍼 크기를 늘려보는 방안도 고려해볼 수 있다.

- postBuffer 를 원하는 크기로 변경

#Git의 HTTP 포스트 버퍼 크기를 500MB로 설정
git config http.postBuffer 524288000

 

 

3. SSH로 푸시

HTTP를 사용하는 대신 SSH를 사용하여 푸시하는 것도 방법입니다. 이를 위해 원격 URL을 SSH URL로 변경할 수 있다:

- SSH를 통해 Git 리포지토리에 푸시하려면 SSH 키를 설정하고, 원격 리포지토리 URL을 SSH 형식으로 변경한 후 푸시

git remote set-url origin git@<server>:<repository>.git

 

나의 경우, SSH 로 푸시해보는 방안을 선택했다.

SSH 키 푸시 방법

1. SSH 키 생성

먼저, SSH 키가 없는 경우 SSH 키를 생성해야 하는데, 먼저 로컬에 SSH 키 쌍(공개 키와 비공개 키)을 생성

#명령어 
ssh-keygen -t rsa -b 4096 -C "{깃헙이메일주소}"

#출력
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/{폴더경로}/.ssh/id_rsa):       
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/{폴더경로}/.ssh/id_rsa
Your public key has been saved in /Users/{폴더경로}/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:{KEY} {깃헙이메일주소}
The key's randomart image is:
+---[RSA 4096]----+
{key's randomart image}
+----[SHA256]-----+

 

이렇게하면,/Users/{폴더경로}/.ssh/id_rsa와  /Users/{폴더경로}/.ssh/id_rsa.pub 생성된다.

2. SSH 공개 키를 Git 서버에 추가

생성된 id_rsa.pub 파일의 내용을 복사 (cat  /Users/{폴더경로}/.ssh/id_rsa.pub 후 복사)

Git 리포지토리가 있는 서버(예: GitHub, GitLab, Bitbucket 또는 AWS CodeCommit 등)에 추가

 

나는 GitHub에서 SSH 키 추가하기 위해 진행

  1. GitHub에서 로그인
  2. 오른쪽 상단 프로필 아이콘을 클릭하고 Settings로 이동.
  3. 왼쪽 메뉴에서 SSH and GPG keys를 선택.
  4. New SSH key 버튼을 클릭하고, 제목과 공개 키(id_rsa.pub 파일의 내용)를 입력한 후 Add SSH key를 클릭.

+ 추가 AWS CodeCommit에서 SSH 키  추가 방법

AWS CodeCommit에서 SSH로 인증하려면 다음 단계를 따릅니다:

  1. IAM Console에 로그인
  2. 사용자를 선택한 후, 해당 사용자 프로필로 이동
  3. Security credentials 탭에서 SSH 키를 추가
  4. 공개 키를 붙여넣고 저장

3. 원격 리포지토리 URL을 SSH 형식으로 변경

이제 로컬 리포지토리에서 원격 리포지토리 URL을 SSH 형식으로 변경

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

AWS CodeCommit의 경우:

git remote set-url origin ssh://git-codecommit.{region}.amazonaws.com/v1/{repos}/{repository}

 

5. SSH 연결 테스트

SSH가 정상적으로 설정되었는지 확인하려면, 다음 명령어를 사용하여 연결을 테스트할 수 있다.

#입력
ssh -T git@github.com

#출력
Hi goodday-g1! You've successfully authenticated, but GitHub does not provide shell access.

 

 

===============================

 

그리고 다시 SSH 연결을 HTTP 연결로 변경하려면

 

G1 🚀    ~/workspace/airflow-g1/github_airflowg1/airflow  ↱ main
# 현재 연결 방식 확인
 git remote -v

# 출력
origin  git@{github 주소} (fetch)
origin  git@{github 주소}  (push)



 G1 🚀    ~/workspace/airflow-g1/github_airflowg1/airflow  ↱ main
# 연결방식 변경
 git remote set-url origin {git clone을 위한 https 주소}

 G1 🚀    ~/workspace/airflow-g1/github_airflowg1/airflow  ↱ main
# 현재 연결 방식 확인
 git remote -v

# 변경된 연결방식을 출력
origin  {github 주소} (fetch)
origin  {github 주소} (push)
728x90

댓글()