2020년 9월 15일 화요일

우분투 서버 원격 제어를 위한 SSH 설치 및 윈도우 클라이언트 PowerShell 접속

이 글은 우분투 SSH 설치 및 윈도우 PowerShell 원격 접속에 관한 글이다. 

가끔 리눅스 서버를 만들다보면, 원격으로 서버 명령을 실행하고, 프로그램을 설치하고 싶을 때가 있다. 이러한 유지관리를 위해 보통 SSH, Telnet 등을 설치한다. 

머리말

SSH는 Secure Shell의 약자로, 암호화된 네트워크 프로토콜이다. 일반적으로 명령행에서 서버에 로그인해 원격으로 서버를 조작할 수 있다. 물론, 서버는 SSH 서버가 실행되고 있어야 한다.

SSH는 1995년 헬싱키 대학 연구자 Tatu Ylonen이 개발하였다. SSH의 목적은 TELNET, FTP 를 대치하는 것이었다. SSH는 오픈소스로 릴리즈되었고, 2006년 IETF(Internet Engineering Task Force)에서 SSH-2로 리비전되었다. SSH-2는 보안성이 더 강화된다. 1999년 OpenSSH가 개발되고, 2005년에는 운영체제 기본 기능으로 지원된다. 

SSH는 login, 호스트 리모트 컨트롤(Telnet기능), 명령 실행(rsh기능), 암호 인증, 터널링(tunneling), VPN, 서버 원격 모니터링, SFTP(SSH File Transfer Protocol) 등을 지원한다.

서버 SSH 설치

다음 명령을 리눅스 서버에서 입력해 ssh를 설치한다.
sudo apt-get install openssh-server
sudo apt-get install ssh
sudo systemctl enable ssh
sudo systemctl start ssh

다음 명령으로 설정을 변경할 수 있다. 파일안에는 사용 포트(기본 22번), 접속 주소, 공개키, 관리자 계정 루트 로그인 허용 옵션 등이 포함되어 있다. 설정 후 sudo service ssh restart를 한다.
sudo gedit /etc/ssh/sshd_config

방화벽에서 22번 포트를 허용한다.
sudo ufw enable
sudo ufw allow 22

ssh 설치 및 설정 후 테스트를 위해, 다음과 같이 ifconfig 명령 실행 후, 서버 IP를 확인한다.

클라이언트 윈도우 SSH 설치

다음 명령을 파워셀에서 입력해 ssh를 설치한다(참고).

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
# This should return the following output:
Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Both of these should return the following output:
Path          :
Online        : True
RestartNeeded : False

작동여부는 다음 명령으로 확인한다.

Test-NetConnection 128.30.1.1 -Port 22

만약 파워셀이 불편하다면, PUTTY 프로그램을 설치하여 SSH를 접속한다.

이제, 다음 메뉴에서 윈도우 방화벽에 SSH포트 22번을 열어준다.

시작-윈도우 시스템-제어판-시스템및보안-윈도우즈 방화벽-고급설정

고급설정에서 인바운드 규칙 선택 후, 작업 패널에서 새규칙을 선택해, 규칙 종류를 포트로 선택한다. 그리고, 허용할 포트번호를 다음과 같이 설정한다.

예) 22, 23, 80

클라이언트 접속 및 사용

윈도우즈에서 파워샐을 실행하고, ssh 계정@서버IP주소 를 다음과 같이 입력한다.

예) ssh ktw@172.30.1.24


sudo apt-get install 같은 명령을 입력해 보자. 잘 실행되는 것을 확인할 수 있다.

다만, 그래픽이 사용되는 프로그램 실행 시 QXcbConnection 에러가 발생한다. 이 경우는 X-server 에뮬레이션 윈도우 프로그램(VcXsrv, Xming 등)을 설치해야 한다. 

마무리
이 글에서는 SSH에 대해 정리하고, 예제를 설명하였다. 사실 전세계에서 사용되는 많은 서버는 리눅스를 기반으로 하고 있고 SSH는 기본으로 설치되어 있는 경우가 많다. SSH를 이용해 서버를 관리할 수도 있고, 해킹에 사용할 수도 있다는 것을 참고해야 한다. 
SSH 개발자는 이 기술을 이용해 많은 컨설팅과 사업을 하였고, 전세계에서 좋은 평판과 가치를 얻었다. 앞으로 오픈소스 기술은 더욱 확장될 것이고, SSH와 같은 도구의 사용 사례는 더욱 많아질 것이다.

Tatu Ylonen

레퍼런스

부록: Telnet설치

Telnet을 서버에 설치하는 순서는 다음과 같다.

sudo apt-get install xinetd telnetd
sudo gedit /etc/xinetd.conf

service telnet
{
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure = USERID
}

sudo gedit /etc/hosts.allow
in.telnetd: ALL

sudo /etc/init.d/xinetd restart

윈도우에서는 윈조우 기능 켜기/끄기 메뉴에서 텔넷 클라이언트 옵션을 체크하면 설치 된다. 그럼 파워셀에서 다음과 같이 텔넷 실행이 가능하다.

부록: 원격 파일 전송을 위한 ftp 설치 및 사용
리눅스 서버에서 원격으로 클라이언트에 파일을 다운로드, 업로드 하고 싶다면, ftp를 설치하거나 scp를 사용해야 한다. ftp설치는 다음과 같다.
sudo apt-get update
sudo apt-get install vsftpd
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

다음과 같이 방화벽을 설치, 설정한다.
sudo apt-get install ufw
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw enable
sudo ufw status verbose

다음과 같이 설정 파일을 열어 수정한다.
sudo vim /etc/vsftpd.conf
...
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
...

$ sudo systemctl restart vsftpd

다음과 같이 원격으로 접속해 사용한다. 참고로, 명령어는 get(파일 다운로드), mget(다중파일 다운로드), put(파일 업로드), ls(폴더 검색), cd(폴더 이동)이다.
$ ftp -p 172.30.10.3
ftp> prompt
interactive mode off
ftp> cd folder
ftp> get test.txt
ftp> put test.txt upload.txt
ftp> mget *
ftp> bye

댓글 없음:

댓글 쓰기