SSH 서비스 포트 관리

SSH 서비스 포트 변경 또는 추가하기

학교 네트워크 망에서는 보안상의 이유로 학교 외부로부터 기본적인 서비스 포트들의 통신을 막아놓은 경우가 있다. 한번은 외부 출장중에 서버에 접근해야 할 일이 생겼는데 기본 SSH 서비스 포트인 22번이 막혀있어 서버의 IP 주소를 맞게 입력했는데도 연구실에서 접속했을 때처럼 되지 않고 아무 응답이 없어 애를 먹었던 기억이 있었다. 이럴 때에는 학내 네트워크 관리를 담당하는 기관에 해당 포트로의 접근을 허용해달라고 신청할 수도 있지만, 이러한 신청 없이도 서비스 자체에서 이용하는 포트를 추가하거나 변경하면 이를 해결할 수 있다.

1. 설정파일 열기

SSH 설정 변경에는 관리자 권한이 필요하다. 따라서 아래와 같이 root 사용자로 변경한 후 환경 설정 파일을 연다.

$ su root
# vi /etc/ssh/sshd_config

2. 포트 변경 또는 추가

설정 파일의 내용 중 ‘Port’ 라는 단어로 검색하여 다음과 같이 서비스 포트를 설정하는 곳을 찾는다. 만약 22 번 포트를 2222 번으로 바꾸고 싶다면 아래와 같이 바꿔줍니다.

Port 2222

또는 추가하려면 다음과 같이 둘다 적어도 됩니다.

Port 22
Port 2222

3. SSH 서비스 재시작

수정된 설정 파일을 적용하기 위해 SSH 서비스를 재시작 해주어야 한다.

# /etc/init.d/sshd restart
Stopping sshd:         [  OK  ]
Starting sshd:         [  OK  ]

4. 외부에서 접속 시도

외부에서 접속할 때 다음과 같이 다른 포트를 이용해 접속할 수 있다.

ssh -p 2222 123.45.00.000

하지만 여전히 외부에서 접속이 불가능한 경우 아래의 항목들을 더 체크해 볼 수 있다.

자주 접하는 에러들

SSH 권한 설정

서버간 인증 설정이 되어있지 않은 상태에서 다음과 같이 입력하면 비밀번호를 물어보게 된다. 비밀번호를 물어보지 않고 접속할 수 있게 하려면 두 서버간의 인증을 해야 한다. 다 똑같이 해주었는데도 비밀번호를 계속 물어본다면, .ssh 디렉토리 및 authorized_keys 파일의 권한을 살펴볼 필요가 있다. 즉 해당 사용자만 읽고 쓰는 것이 가능해야 실제로 외부에서 비밀번호를 물어보지 않고 들어올 수 있는 ssh 를 사용할 수 있다.

다음과 같이 ssh 관련 파일들의 퍼미션이 설정되어 있는지 체크한다.

[lab@sirna1 ~]$ ls -al .ssh
total 2200
drwx------  2 lab lab    4096 Feb  1 17:18 .                # 700
drwx------ 38 lab lab 2174976 Mar  2 18:06 ..
-rw-r--r--  1 lab lab     802 Feb  1 17:01 authorized_keys  # 644
-rw-------  1 lab lab    1675 Feb  1 16:54 id_rsa           # 600
-rw-r--r--  1 lab lab     402 Feb  1 16:54 id_rsa.pub       # 644
-rw-r--r--  1 lab lab   54719 Feb 16 16:25 known_hosts      # 644

Connection reset by peer (1005)

sshd 포트 설정 및 해당 포트에 대한 방화벽도 열어주었는데도 접속이 안 되면서, Connection reset by peer (1005) 에러가 난다면 hosts.allow 및 hosts.deny 파일을 살펴볼 필요가 있다. 아래는 kt 서버에서 두 파일이 다음과 같이 설정이 되어 있어서 학외에서 접속이 불가능했던 경우였다. 해당 파일들의 내용을 모두 주석처리한 뒤에 다시 시도해 보았더니 외부에서 접속이 잘 되었다.

#
# hosts.allow   This file contains access rules which are used to
#       allow or deny connections to network services that
#       either use the tcp_wrappers library or that have been
#       started through a tcp_wrappers-enabled xinetd.
#
#       See 'man 5 hosts_options' and 'man 5 hosts_access'
#       for information on rule syntax.
#       See 'man tcpd' for information on tcp_wrappers
#
ALL: 123.45.
ALL: 123.46.
ALL: 192.168.1.
ALL: 10.1.
rpcbind: ALL
#
# hosts.deny    This file contains access rules which are used to
#       deny connections to network services that either use
#       the tcp_wrappers library or that have been
#       started through a tcp_wrappers-enabled xinetd.
#
#       The rules in this file can also be set up in
#       /etc/hosts.allow with a 'deny' option instead.
#
#       See 'man 5 hosts_options' and 'man 5 hosts_access'
#       for information on rule syntax.
#       See 'man tcpd' for information on tcp_wrappers
#
ALL: ALL