ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클라이언트-서버간 SSH 패스워드 없이 접근하는 방법
    etc 2024. 9. 24. 15:32
    반응형

     

    CI/CD 로 개발소스를 서버에 배포 할때

    scp던 ssh던 ssh 방식으로 접속을 해야할일이 많다.

     

    그런 경우에 대해서 클라이언트, 서버간 SSH 접속시 패스워드 없이 접근할 수 있는 방법에 대해 설명하려 한다.

     

    1. ssh 키가 생성 되었는지 확인 ( 클라이언트 및 서버 양쪽 다 동일 )

    sudo su - <username>

     

     키가 이미 발급되있는지 홈 디렉토리에 ssh 디렉토리 확인

    ls -l ~/.ssh
    
    # id_rsa: 개인 키 파일
    # id_rsa.pub: 공개 키 파일

     

     ssh 키가 없다면 키 생성

    ssh-keygen -t rsa -b 4096 -C "<username>@domain"
    
    # -t rsa: RSA 방식으로 키를 생성.
    # -b 4096: 4096비트 길이의 키를 생성(더 강력한 보안을 위해).
    # -C "<username>@domain": 키에 대한 주석.
    
    키 생성시 첫 질의로 파일 경로를 묻는다.
    기본적으로 ~/.ssh/id_rsa 경로에 저장되도록 그냥 Enter 처리
    
    두번째 질의로 패스워드를 묻는데, 패스워드 없이 접근하려면 그냥 Enter 처리
    세번째 질의는 패스워드 재확인이라 Enter 처리
    
    이후 Key 생성 완료

     

    공개키 확인

    cat ~/.ssh/id_rsa.pub

     

    2. 클라이언트에서 생성된 공개키를 원격 서버의 ~/.ssh/authorized_keys 파일에 값을 추가해야한다.

      - 원격 서버의 ~/.ssh/authorized_keys 파일이 없다면 생성

    touch ~/.ssh/authorized_keys

     

    파일 권한 설정

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

     

    생성된 ~/.ssh/authorized_keys 파일에 클라이언트의 공개키값을 추가해야 한다.

    1. cat /클라이언트ssh키경로/public_key.pub >> 원격서버 ~/.ssh/authorized_keys
    cat으로 클라이언트 ssh키 값을 복사 후 원격서버 authorized_keys 파일에 값을 붙여넣는 방법
    
    2. echo "클라이언트 공개 키 값" >> ~/.ssh/authorized_keys
    echo 명령을 통해 클라이언트 값을 복사 후 원격 서버에서 바로 붙여넣는 방법

     

    소유자 확인

    chown -R $USER:$USER ~/.ssh
    
    # 실제 ssh로 접속할 username을 확인

     

    3. SSH 설정 파일 확인

      

      원격 서버의 SSH 설정 파일을 통해 SSH 키 인증이 활성화 되있는지 체크

    sudo vi /etc/ssh/sshd_config

     

     SSH 키 인증 활성화 및 패스워드 미입력을 위한 설정 확인

    PubkeyAuthentication yes
    PasswordAuthentication no
    ChallengeResponseAuthentication no

     

    설정 확인 후, SSH 서비스 재시작

    sudo systemctl restart sshd

     

    4. 클라이언트에서 원격 서버 접속 확인

    ssh -i ~/.ssh/id_rsa <username>@<원격서버 IP>

     

     패스워드 입력 없이 바로 접속되는지 확인하면 된다.

    정상 접속 화면

     

     패스워드 입력이 그대로 나오거나, 접속이 안된다면

    ssh -i ~/.ssh/id_rsa <username>@<원격서버 IP>

     

    ssh 디버그 옵션을 통해 확인 필요

     

    ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※

     

    ssh 키를 연결한 이후에도, 

    sudo 명령어를 통한 ssh 접근시 패스워드 입력을 요구할 수 있는데

    패스워드 없이 접속할수 있는 방법

     

    1. 비밀번호 입력 없이 sudo 권한을 부여, visudo를 통한 사용자 권한 제어

    sudo visudo

     

    2. 사용자 패스워드 입력 없이 sudo 사용

    ${username} ALL=(ALL) NOPASSWD: ALL

     

    특정 명령에만 사용 하는 경우

    ${username} ALL=(ALL) NOPASSWD: /path/to/command

     

    3. SSH 구성 파일을 이용한 자동 sudo 실행

    vi ~/.ssh/config

     

    다음 내용을 추가하여 ssh 접근 설정

    Host infra_server
        HostName ${IPAddress}
        User ${username}
        IdentityFile ~/.ssh/id_rsa
        RemoteCommand sudo -i

     

    스크립트 생성

    echo 'ssh -t ${username}@${IPAddress} "sudo /path/to/command"' > ssh_infra_server.sh
    chmod +x ssh_infra_server.sh

     

    스크립트를 실행하면 sudo 명령어가 포함된 SSH 세션이 자동으로 시작

    ./ssh_infra_server.sh

     

    반응형

    댓글

Designed by Tistory.