SSH (Sechure Shell, 시큐어 쉘)은 네트워크 상에 존재하는 다른 서버 또는 컴퓨터에 원격으로 접속하여 Shell(쉘) 환경에서 명령을 실행할 수 있게 하는 프로그램 또는 프로토콜을 말한다. SSH는 기존의 rsh, rlogin, telnet등을 대체하여 보안상 안전한 네트워크 통신을 할 수 있도록 한다. 이 글에서는 원격에서 SSH 접속을 할 수 있도록 sshd 서버 환경을 구축하는 방법에 대해 알아본다.
Ubuntu sshd 서버 설치
아래와 같이 openssh-server 패키지를 설치한다.
$ sudo apt update
$ sudo apt install openssh-server -y
Ubuntu sshd 설정
openssh-server를 설치 했으면 sshd 설정을 한다.
SSH 포트 설정
아래화 같이 포트를 확인한다. Port 22는 SSH 기본 포트로 잘 알려져 있기 때문에 바꿔주는 것이 보안상 좋다.
$ cat /etc/ssh/sshd_config| grep Port
#Port 22
#GatewayPorts no
따라서, 로컬 개발 환경이 아니고 외부에 노출되는 서버 설정을 하는 중이라면 이 값을 임의의 값으로 바꿔주는 것이 좋다. 바꾸는 방법은 #Port 앞에 있는 주석(“#“)을 지우고 바꾸려는 포트번호를 적어준다. 아래는 포트번호를 10022로 바꾼 예이다.
$ cat /etc/ssh/sshd_config| grep Port
Port 10022
#GatewayPorts no
만약 virtualbox 환경에서 NAT로 연결해서 사용중이라면, virtualbox NAT 포트포워드 설정에서 바꾼 포트번호로 바꿔준다.


SSH 포트번호를 10022로 바꿨을 경우를 위 예처럼 포트포워딩이 10022로 요청 될 수 있도록 게스트 포트를 10022로 바꿔준다.
virtualbox 우분투 NAT 설정은 아래 글을 참고하면 된다.
SSH root 계정 로그인 제한 설정
root 계정은 모든 권한을 가지고 있으므로, SSH 접속 시 root 계정은 로그인을 제한하도록 하는 것이 보안에 좋다.
$ cat /etc/ssh/sshd_config| grep PermitRootLogin
#PermitRootLogin prohibit-password
# the setting of "PermitRootLogin without-password".
아래와 같이 “PermitRootLogin no” 가 되도록 수정한다.
$ cat /etc/ssh/sshd_config| grep PermitRootLogin
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
SSH 접속 허용할 그룹/유저 설정
SSH 접속을 특정 그룹이나 유저로 제한하려고 한다면, 아래와 같이 AllowGroups 또는 AllowUsers 를 추가한다.
$ cat /etc/ssh/sshd_config| grep AllowUsers
AllowUsers vboxuser
SSH 재시작
바뀐 설정으로 sshd 서버를 재시작 한다.
$ sudo systemctl restart sshd
SSH 접속
putty(https://www.putty.org/)를 설치하고 sshd 서버에 접속해 보도록 한다.

Host Name에 IP주소를 입력하고 Port에 설정한 포트번호를 입력하고, Open을 클릭하여 접속 되는지 확인한다.

AllowUsers로 접속을 허용한 vboxuser 계정으로 로그인 해본다.
