Dico

SSH 설치 & 비밀번호 없이 로그인하기

접근자 : Git 서버
접근하려는 서버 : 배포 서버
접근자의 공개키를 접근하려는 서버에 등록한다.

SSH 설치 확인

Linux 최신 배포판은 기본적으로 탑재

# rpm -qa | grep openssh-server
openssh-server-6.6.1p1-31.el7.x86_64

OpenSSH 패키지 설치

# yum install openssh-server openssh-clients openssh-askpass

Installed:
openssh-askpass.x86_64 0:7.4p1-16.el7
Dependency Installed:
atk.x86_64 0:2.28.1-1.el7 gtk-update-icon-cache.x86_64 0:3.22.30-3.el7
gtk2.x86_64 0:2.24.31-1.el7 hicolor-icon-theme.noarch 0:0.12-7.el7
libXcomposite.x86_64 0:0.4.4-4.1.el7 libXcursor.x86_64 0:1.1.15-1.el7
libXi.x86_64 0:1.7.9-1.el7 libXinerama.x86_64 0:1.1.3-2.1.el7
libXrandr.x86_64 0:1.5.1-2.el7
Updated:
openssh-clients.x86_64 0:7.4p1-16.el7 openssh-server.x86_64 0:7.4p1-16.el7

Dependency Updated:
openssh.x86_64 0:7.4p1-16.el7

Complete!

위치 확인

# which sshd
/usr/sbin/sshd

설정 파일 수정

# vi /etc/ssh/sshd_config
Port 22		// Port 변경할 경우 주석 풀고 지정

방화벽 해제

# firewall-cmd --permanent --zone=public --add-port=22/tcp

구동

SSH Server 프로세스명은 sshd(SSH Daemon)

# /bin/systemctl sshd restart

구동 확인

# ps -aef | grep sshd
root     32699     1  0 09:27 ?        00:00:00 /usr/sbin/sshd -D
# /bin/systemctl status sshd
 sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-07-24 09:27:06 KST; 1s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 32699 (sshd)
   Memory: 980.0K
   CGroup: /system.slice/sshd.service
           └─32699 /usr/sbin/sshd -D

Git 서버(25) laravel 계정에 SSH Key 생성

# su - laravel
# ssh-keygen -t rsa -b 4096 -N ""

Generating public/private rsa key pair.
Enter file in which to save the key (/home/laravel/.ssh/id_rsa):   // 옵션 ‘-f {저장경로}’ 지정하면 안 물어봄
Created directory '/home/laravel/.ssh'.
Your identification has been saved in /home/laravel/.ssh/id_rsa.
Your public key has been saved in /home/laravel/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wTvfAlbqytI6Ho+QLhboVliuMP/UD1NT0AjDz41AIgw laravel@dico-dev
The key's randomart image is:
+---[RSA 4096]----+
|Eo. .o+..o            |
|     .. .oo...            |
|          +ooo         |
|      .      +*.          |
|.   +       S             |
|+o + . + = .          |
|oo* o.+ . o .       |
|.*.oo=.=    .         |
|o..o=++ .             |
+----[SHA256]-----+

  • id_rsa : 비밀키
  • id_rsa.pub : 공개키. 로그인 인증키
  • authorized_keys : 서버에서 인증된 공개키 정보를 저장하는 파일. 권한 600. 개행 문자로 공개키를 구분하여 여러개 저장. 비밀키를 갖고 있는 클라이언트에 접속 시 자동 인증 처리.
  • known_hosts : 접속하려는 대상의 호스트키를 등록. 처음 접속 시 ‘Are you sure you want to continue connecting (yes/no)?’에서 yes하면 등록이 되어서 다음 접속부터는 확인하지 않는다.

보안 컨텍스트 복구

# restorecon -R ~/.ssh

Git 서버(25) 개인키 복호화
암호화되어 있으면 외부에서 접속할 때마다 암호를 입력해야 한다.

# cp ~/.ssh/id_rsa ~/.ssh/id_rsa.enc
# openssl rsa -in ~/.ssh/id_rsa.enc -out ~/.ssh/id_rsa

배포 서버(20)에서 Git 서버(25) SSH 공개키 복사

# ssh root@192.168.0.25 cat ~/.ssh/id_rsa.pub | tee -a ~/.ssh/authorized_keys

보안을 위해 배포 서버(20) SSH를 다른 계정에서 사용할 수 없도록 처리

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

Git 서버에서 배포 서버 접속 가능

# ssh laravel@192.168.0.20