-
클라이언트-서버간 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
반응형'etc' 카테고리의 다른 글
AWS S3 이용 (0) 2024.07.17 Linux - Root Permit 설정 (0) 2024.05.13 Tomcat - Encoding UTF-8 설정 (0) 2023.07.20 Linux - 원하는 프로세스 kill 스크립트 (0) 2023.07.20 Gitlab Runner Error - This job is stuck because the project doesn't have any runners online assigned to it.Go to project CI settings (0) 2023.04.06 댓글