본문 바로가기

개발/Linux(Ubuntu)

02 - SSH

1. 실제로 웹서비스를 하는 회사에서 어떻게 처리하는지 모르겠지만

나는 데이터베이스를 다룰 때는 sql툴을 사용하고

배포할 때는 ssh를 통해 서버에 접속해서

깃허브 pull -> gunicorn -> nginx

일련의 과정을 직접 하나하나 처리한다.

 

서버가 내 옆에 있다면 직접 키보드 연결해서 처리해도 되겠지만

요즘 필수가 된 클라우드 컴퓨팅을 생각해보면 SSH에 익숙해질 필요가 있다고 본다.

(AWS EC2 역시 이 방식으로 제어하니까..)

 

2. 서버와 클라이언트

1)서버

- openssh-server 설치

# server - 명령어를 입력할 위치
sudo apt-get install openssh-server

- ssh 실행

# server
sudo service ssh start

 

 

2) 클라이언트

- git bash 실행(putty사용해도 됨, cmd 사용해도 됨)

 

# client
ssh '서버계정이름'@'서버ip' -p '포트번호'

* 계정명 - aws ec2에서 ubuntu인스턴스를 생성하면 기본적으로 ubuntu라는 계정명이 생성됨.

* ip - ifconfig | grep inet  명령어로 확인가능.

* 포트번호 - sshd_config파일에서 설정한 Port 값. 기본값은 22.

 

 

 

3) 보안

- pub키를 이용한 접근제한 방법

 

- 키 생성

# client
ssh-keygen -t 'key file name'

커맨드 실행시 passphrase(비밀번호) 입력을 받는데

빈칸으로 넘기면 비밀번호 없이 키가 생성된다. (이중잠금)

* 생성된 키는 client컴퓨터(윈도우라 가정) C드라이브/Users/계정명/.ssh 폴더에 위치한다.

 

- 키 등록

# server

# .ssh 생성
mkdir ~/.ssh

# authorized_keys 파일 생성
sudo vim ~/.ssh/authorized_keys

#########
authorized_keys파일 내부에 keygen으로 생성한 키 파일의 내용을 복사
#########

# authorized_keys 파일 권한 수정
sudo chmod 755 /.ssh/authorized_keys

 

- 설정 변경

# server
sudo vim /etc/ssh/sshd_config

* sudo = 관리자 권한으로 실행

* vim = vi와 같은 편집툴. 설치 안되어 있다면 vi로 실행(아니면 sudo apt-get install vim 으로 설치)

 

- 설정파일 내용

#       $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 6364
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 8
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

* Port - ssh 기본 포트는 22번. 그만큼 22번 포트로 들어오는 접속시도도 많다.

처음에 방화벽이나 다른 조치 하나도 없이 개방해두었다가

그래픽카드들이 채굴장으로 끌려가는 사고가 발생했다.

 

* Permitrootlogin - root계정으로 로그인을 허용할지

* PubkeyAuthentication - pub키를 사용해서 인증할지

* PasswordAuthentication - password를 사용해서 인증할지, pubkey와 조합하면 비밀번호 없이 pubkey로만 접속 할 수 있다.

 

 

- 방화벽 실행

# server
sudo ufw allow 포트번호
sudo ufw enable

* 방화벽 규칙 추가 sudo ufw allow '번호'

* 방화벽 규칙 삭제 sudo ufw delete '규칙' '번호' (allow인지 deny인지)

 

 

- ssh 재시작

# server
sudo service ssh restart

'개발 > Linux(Ubuntu)' 카테고리의 다른 글

04 - Docker  (0) 2022.04.01
04 - mariadb(mysql)  (0) 2022.04.01
03 - FTP  (0) 2022.03.31
01 - OS  (0) 2022.03.31