효율 업그레이드 의 교묘 한 SSH 업그레이드 배치 프로그램

최근 의 업 무 는 말레이시아 의 고객 과 함께 Hack 이 React 로 그들의 홈 페이지 를 재 구성 하 는 것 이다. 답답 한 것 은 그들 이 CI 를 추앙 하지 않 고 Hack 의 업무 가 CI 를 만 들 필요 가 없다 고 생각 하 는 것 이다. 주도권 이 그들 에 게 있 기 때문에 이 일 을 잘 지 키 지 못 했다 는 것 이다.하지만 결국 서버 에 Docker 를 수 동 으로 배치 하기 로 합의 했다.배치 환경 은 AWS 의 EC2 인 스 턴 스 입 니 다. 말레이시아 측은 시안 에 게 AWS 권한 을 주지 않 고 서버 의 IP 와 비밀 번 호 를 제공 하기 때문에 처음에 우리 의 배치 절 차 는 다음 과 같 습 니 다.
ssh [email protected]
//  server  
cd app
git pull
//   git  
docker-compose restart server

매번 업데이트 할 때마다 6 단계 가 필요 합 니 다. 그 중에서 두 부 는 비밀 번 호 를 입력 해 야 합 니 다. 매일 몇 번 씩 실 행 됩 니 다. 저 처럼 게 으 른 프로그램 원숭이 는 정말 참 을 수 없습니다. 어떻게 6 단 계 를 원 키 로 바 꾸 어 실행 할 수 있 습 니까?원 키 로 실행 하려 면 비밀 번 호 를 입력 할 수 없 지만 비밀 번 호 는 스 크 립 트 에 명문 으로 쓸 수 없어 안전 하지 않 습 니 다.이 문 제 를 해결 하려 면 비밀 번 호 를 입력 하 는 번 거 로 움 을 없 애기 위해 SSH 의 OpenSSH Key 를 사용 하여 인증 해 야 합 니 다.예 를 들 어 우 리 는 Linux server 에 로그 인 하려 면 다음 과 같은 절차 만 필요 합 니 다. ssh -i ~/.ssh/ec2.pem [email protected] 구체 적 인 실현 절차 도 비교적 간단 합 니 다.
  • key pair 와 pem file 생 성
  • ssh-keygen -t rsa -b 2048 -v
    

    key 의 이름 을 입력 해 야 합 니 다: ec2, 비밀 번 호 를 설정 하지 마 십시오.완료 후 ec2 와 ec2. pub 두 파일 을 생 성하 여 pem 파일 mv ./ec2 ~/.ssh/ec2.pem 이름 을 바 꿉 니 다.
  • 인증 파일 을 로 컬 에서 server 엔 드 로 업로드
  • ssh-copy-id -i ./ec2.pub [email protected]
    //  server  
    
  • 테스트 연결
  • ssh -i ~/.ssh/ec2.pem [email protected]
    

    암호 없 이 server 에 로그 인 한 후에 git 암호 문 제 를 해결 해 야 합 니 다. 사실은 상기 원리 와 차이 가 많 지 않 지만 절차 가 다 르 기 때문에 구체 적 인 과정 은 GitHub 도움말 문 서 를 참조 할 수 있 습 니 다.그 다음 에 repo 의 url 을 git remote set-url origin [email protected]:*USERNAME*/*OTHERREPOSITORY*.git 로 설정 합 니 다. 만약 에 코드 가 github 에서 위탁 관리 되 었 다 면 문서 절차 에 따라 OK 입 니 다. 그러나 우리 가 사용 하 는 git 는 회사 내부 의 것 입 니 다. git 서비스 ssh 의 포트 는 5442 로 바 뀌 었 습 니 다. 상기 절 차 를 마치 고도 git 서버 에 연결 되 지 않 습 니 다. 우 리 는 추가 설정 을 해 야 합 니 다. 열 거나 ~ / ssh / config 를 만 들 고 다음 설정 을 추가 해 야 합 니 다.
    호스트 my. git. com \ # git 창고 주소 포트 5442 IdentityFile ~ /. ssh / idrsa_git \ # 생 성 된 pem 파일 이름
    지금까지 암호 없 는 로그 인 에 대한 수 요 는 만족 되 었 습 니 다. 배치 절 차 는 4 단계 가 필요 합 니 다.
    ssh ~/.ssh/ec2.pem [email protected]
    cd app
    git pull
    docker-compose restart server
    

    ssh 는 로 컬 에서 서버 명령 을 직접 실행 합 니 다. 예 를 들 어 앞의 두 단 계 는 한 줄 에 놓 을 수 있 습 니 다.
    ssh ~/.ssh/ec2.pem [email protected] cd app
    

    이렇게 되면 server 의 app 디 렉 터 리 로 바로 들 어 갑 니 다.여러 명령 을 수행 하려 면 명령 사이 에 & & 를 추가 하여 실현 할 수 있 습 니 다.
    ssh ~/.ssh/ec2.pem [email protected] cd app && git pull && docker-compose restart server
    

    그러나 뜻 대로 되 지 않 습 니 다. & & 뒤의 명령 은 server 에서 실행 되 지 않 고 local 에서 실 행 됩 니 다. 원래 셸 은 ssh ~/.ssh/ec2.pem [email protected] cd app 을 첫 번 째 local 명령 으로 분 석 했 습 니 다. git pull 은 두 번 째 local 명령 이 었 기 때문에 두 번 째 명령 은 server 에서 실행 되 지 않 았 습 니 다.이 문 제 를 해결 하려 면 사실 매우 간단 하 다. server 에서 실 행 된 몇 가지 명령 앞 뒤 에 단일 / 더 블 따옴표 만 추가 하면 된다.
    ssh ~/.ssh/ec2.pem [email protected] "cd app && git pull && docker-compose restart server"
    

    원 키 업그레이드 의 목 표 는 이미 달성 되 었 지만 명령 이 너무 길 어서 매번 입력 을 업그레이드 하거나 copy 가 이렇게 긴 명령 도 매우 고통스럽다.우 리 는 셸 의 alias 특성 을 빌려 실현 할 수 있다. 즉,
    echo  alias myserver='ssh ~/.ssh/ec2.pem [email protected]' >>  ~/.zshrc #.bashrc
    echo  alias update_myserver='myserver "cd app && git pull && docker-compose restart server"' >>  ~/.zshrc #.bashrc
    

    결국 두 드 리 기만 하면 update_myserver 한 번 프로그램의 업그레이드 배 치 를 완성 할 수 있다.

    좋은 웹페이지 즐겨찾기