Github 작업에서 SSH 및 Rsync를 통해 서버에 배포

11999 단어 devopsgithubtooling
Github 조작을 사용해서 배치하고 싶습니다. zellwk.com Github에 제출할 때, Github 조작을 사용해서 제 사이트를 구축하고 제 Digital Ocean 서버에 배치하고 싶습니다.
이 과정에서 가장 어려운 부분은 SSH와 rsync를 사용하여 서버에 배치하는 것이다.나는 SSH DeploySSH Action 등 여러 가지 Github 조작을 시도했지만 오랫동안 업무 권한을 얻지 못했다.
나는 Github 작업과 SSH에 관한 대부분의 글이 나에게 큰 도움이 되지 않는다는 것을 발견했다.내가 마침내 이 과정을 어떻게 해야 할지 생각하기 전에, 나는 디버깅에 며칠 동안 갇혔다.
오늘은 rsync와 SSH 배치를 통한 정확한 절차를 공유하고 싶습니다.이 절차는 Digital Ocean을 사용하지 않더라도 모든 서버에 적용됩니다.

1단계: SSH 키 생성


로컬 컴퓨터나 서버에서 SSH 키를 생성할 수 있습니다.나중에 키를 삭제할 수도 있지만 다른 Github 작업에 SSH 키를 다시 사용할 수 있도록 서버에서 이 작업을 수행하는 것이 좋습니다.
이 경우 SSH를 서버에 연결합니다.
ssh [email protected]
서버에 접속한 후 .ssh 폴더로 이동합니다.여기서 SSH 키를 생성합니다.
cd ~/.ssh
SSH 키를 생성할 때는 사용할 수 없습니다default instructions on Github's generating an SSH key page.이는 Github 작업이 최신 Ed22159 알고리즘을 지원하지 않기 때문입니다.우리는 유류 명령을 사용해야 한다.

다음은 당신이 사용해야 할 명령입니다.이메일 주소로 바꾸는 것을 기억하세요. [email protected]
ssh-keygen -t rsa -b 4096 -C "[email protected]"
참고: 일부 Github Action 작성자는 SSH 키를 사용하려면 PEM 형식이 필요하다고 말합니다.이거 가짜야.나는 이미 표준 RSA 형식으로 테스트를 진행했는데, 그것은 작동할 수 있다.
그런 다음 SSH 키 파일의 이름을 지정해야 합니다.여기서 기본 파일 이름 (즉 id_rsa 을 사용하는 것을 권장하지 않습니다.이 키가 Github 작업에 사용된다는 것을 알 수 있도록 파일 이름을 github-actions 로 바꾸는 것을 권장합니다.6개월 후에 SSH 키를 볼 때 명시적으로 표시할 가치가 있습니다.

암호 구문도 제공해야 합니다.Github에서 SSH 명령을 실행할 때 암호를 입력할 수 없으므로 비워 둡니다.

SSH 키를 생성하면 다음과 같은 귀여운 이미지가 나타납니다.
ls 명령을 사용하고 있다면, .ssh 폴더에서 키를 볼 수 있을 것입니다.
ls
공개 키는 .pub 확장자를 포함하지만 개인 키는 포함하지 않습니다.

2단계: 공인 키에 공개 키 추가


개인 키 ((github-actions.pub 를 사용하는 기기가 서버에 접근할 수 있도록 키 authorized_keysgithub-actions 에 추가해야 합니다.
가장 간단한 방법은 cat 명령을 사용하여 github-actions.pubauthorized_keys에 추가하는 것이다.그것은 이렇게 보인다.
cat github.pub >> authorized_keys
명령의 역할은 다음과 같습니다.
  • github.pub캡처cat의 내용.
  • authorized_keys 뒤에 >>를 붙인다.
  • 참고: 단일 직각 브래킷>>이 아닌 이중 직각 브래킷>을 사용해야 합니다.Double은 추가를 나타내고 single은 덮어쓰기를 나타냅니다.조심하다

    3단계: 저장소 기밀에 개인 키 추가


    Github의 저장소로 이동하여 "설정"을 누르고 "기밀"을 누르십시오.'새 저장소 기밀'이라고 적힌 단추가 보일 것입니다.



    New repository secret을 클릭하면 암호를 묻는 메시지가 표시됩니다.그 비밀에는 비밀의 이름과 내용 두 가지가 포함되어 있다.이 비밀 이름은 나중에 Github 작업 흐름에서 내용을 얻는 데 사용됩니다.

    비밀 이름을 쓸 때, 자리 표시자와 같이 대문자로 밑줄을 공백으로 사용하십시오.이것은 우리가 통상적으로 비밀을 지정하는 격식이다.
    이 예에서 나는 이 비밀의 이름SSH_PRIVATE_KEY을 선택했다.
    가치를 얻기 위해서는 서버로 돌아가서 github-actions 개인 키를 열어야 합니다.우리는 nano.로 이 점을 실현할 수 있다.
    nano github-actions
    
    너는 유사한 파일을 볼 수 있을 것이다.(내가 이 열쇠를 드러낼까봐 걱정하지 마라. 나는 이미 그것을 망가뜨렸다. 나는 단지 너에게 도대체 무슨 일이 일어날지 보여주고 싶었을 뿐이다.)

    모든 내용을 복사해서 비밀값에 붙여넣어야 합니다

    우리는 이렇게 열쇠를 사용할 수 있다.
    다음에 "비밀 추가"를 누르면 비밀 페이지로 가져옵니다.여기에는 저장소 기밀 문서SSH_PRIVATE_KEY가 표시됩니다.

    4단계: Github 작업 워크플로우에 개인 키 추가


    나는 당신이 이미 알고 있다고 가정하기 때문에 how to create a basic Github Actions file SSH 키를 추가하는 절차만 여기서 토론할 것입니다.
    개인 키를 추가하는 것은 복잡한 작업입니다. 여기에서 사용할 수 있는 Github 동작을 찾겠습니다.나에게 유일하게 효과적인 행동은 도진의Install SSH Key이다.
    steps:
      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
    
    SSH 키 설치 작업에는 두 개의 입력keyknown_hosts 값이 필요합니다.key는 Github Secrets에 추가된 개인 키입니다.우리는 이런 비밀을 사용할 수 있다.
    steps:
      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
    
    known_hosts값은 이상한 산열값이다.known_hosts 서버에서 .ssh 파일을 열면 다음과 같이 표시됩니다.

    Github 운영 기밀에 값 중 하나를 추가해야 합니다.우리가 처음에 어떻게 이 값을 얻었지?!불행하게도, Github의 모든 조작이 나에게 이 점을 알려주지 않았기 때문에, 나는 어쩔 수 없이 구글에서 한동안 검색을 해야만 했다.
    고맙습니다. 우리는 명령을 사용하여 이 이상한 산열 값을 생성할 수 있습니다.나는 다음 단계에서 이 명령을 토론할 것이다.현재 Shimataro의 Install SSH 키에 오류가 발생하지 않도록 known_hosts에 임의 값을 추가하기만 하면 됩니다.
    steps:
      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
    

    5단계: 올바른 알려진 값 추가


    우리는 known_hosts 명령을 사용하여 정확한 ssh-keyscan 값을 생성할 수 있다.보아하니 이렇다.
    ssh-keyscan -H IP_ADDRESS_OF_HOST
    
    IP_ADDRESS_OF_HOST를 서버의 실제 IP 주소로 바꾸면 다음과 같은 결과를 얻을 수 있습니다.(제 IP 주소를 생략했지만 다른 모든 내용을 보여 드리려고 합니다.)

    이 사실을 알게 되면 Github 기밀에 IP 주소 (내 이름 SSH_HOST 를 수동으로 추가할 수 있습니다.

    그리고 우리는 ssh-keyscan를 통해 정확한 정보를 생성하여 known_hosts 파일에 추가할 수 있다.
    steps: 
      # ...
      - name: Adding Known Hosts
        run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
    

    6단계: Rsync 서버 시작


    SSH를 통해 rsync를 서버에 동기화할 수 있습니다.이를 위해서는 SSH 사용자와 호스트에 대해 알아야 합니다.다음은 명령의 모습이다.
    rsync -flags source user@host:destination
    
  • flags는 당신이 그것과 동기화하기를 원하는 표지입니다.우리는 보통 avz를 사용하는데 이것은 archive, verbosecompress를 대표한다.만약 당신이 처음rsync-ing이라면, 저도 ndry-run 로고를 사용하시기를 권장합니다.
  • source 복제할 소스 파일
  • user@host는 서버의 사용자 이름과 IP 주소입니다.이런 가치관은 비밀로 해야 한다.
  • destination는 복사할 파일의 위치입니다.
  • 다음은 내가 zellwk를 배치하는 데 사용한 실제 예이다.com 내 서버에 연결해.
    - name: Deploy with rsync
      run: rsync -avz ./dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/zellwk/zellwk.com/dist/
    
    verbose 로고가 있기 때문에 rsync를 통해 복제된 자원 목록을 볼 수 있을 것입니다.

    이렇게!

    마무리


    다음은 모든 것을 정리하는 절차이다.
  • SSH 키 구문을 표준 RSA 형식으로 생성
  • 에 공개 키 추가 authorized_keys
  • 기밀 키에 기밀 키 추가
  • ShimataroInstall SSH Key 작업을 사용하여 실행 프로그램에서 SSH 키를 생성합니다.
  • 올바른 구성 추가known_hosts
  • SSH를 통한 Rysnc 배포
  • 완료!:)
    읽어주셔서 감사합니다.본문은 최초로 my blog에 발표되었다.더 많은 글을 원하시면 더 좋은 전단 개발자가 되도록 도와주십시오. my newsletter

    좋은 웹페이지 즐겨찾기