Network2022. 10. 25. 16:32

정말 오랜만에 AWS에서 인스턴스를 띄워서 PuTTY로 접속해보려고 하는데,

콘솔에서 방금 만든 키 페어를 인스턴스에 설정해주고 접속을 하려고 해도 아래 오류로 인해 접속이 되지 않았다.

'Error: No supported authentication methods available (server sent: publickey)'

 

여러 글들을 찾아봐도 .pem을 PuTTYgen으로 변환해 사용하라거나 계정 이름을 확인하라고들 하는데,

도저히 안돼서 AWS의 CLI를 사용하려 해도 auth failed만 뱉는 답답한 상황이었다.

(루트 사용자 계정이 아니라 IAM 계정이라...)

 

EC2 접속 메뉴얼을 천천히 읽어보니 최신 버전 PuTTY를 사용하라는 말이 있어 업데이트 했더니 문제 없이 접속이 된다.

올해 초에 설치한 PuTTY(v0.74)인데 뭐가 문제였던건진 모르겠지만...

 

 

요약:

구버전 PuTTY에서 EC2에 private key를 사용한 접속이 안될 수 있으니,

username도 키 페어도 모두 확인했는데 안된다면 PuTTY를 최신 버전으로 업데이트해보자.

필자는 v0.77로 업데이트해 해결했다.

'Network' 카테고리의 다른 글

AWS를 활용한 Web/FTP Server 제작  (0) 2017.08.05
RaspberryPi를 이용한 Web/FTP 서버 구축  (0) 2017.08.04
Posted by BinZIP
Network2017. 8. 5. 01:14

AWS를 활용한 Web/FTP Server 제작

 

AWS를 활용해 웹서버와 FTP서버를 동시에 구축해 웹 개발 환경을 구현해본다.

 

AWS Instance Launching & Setting

AWS Amazon Web Services의 약자로 아마존닷컴에서 제공하는 원격 컴퓨팅 서비스이다.

https://aws.amazon.com/에 접속해 회원가입 후, 제품 – EC2로 들어간다.



Launch Instance 버튼을 클릭한다.



다양한 OS를 선택할 수 있게 되어 있다. 필자는 Ubuntu로 서버를 구축해보겠다.



‘Free tier eligible’이라고 표시된 항목에 체크하고 Review and Launch 버튼을 클릭한다. Free tier AWS 가입일로부터 12개월간 사용 범위 내에서 무료이다. 관련된 내용은 AWS Free tier 안내 항목을 참조하기 바란다.



Launch 버튼을 클릭한다.




새로 계정을 만든 경우 Key Pair가 없을 것이므로 Create a new key pair 항목을 선택해 원하는 이름을 입력해주고 Download Key Pair를 클릭해 Key Pair를 다운로드 받는다. 여기서 주의할 점은 Key Pair 파일의 이름을 바꾸면 사용할 수 없으며, 재발급이 되지 않으니 잃어버리지 않도록 한다. 다운로드 받은 Key Pair를 선택해 Launch Instances 버튼을 클릭한다.



아래쪽에 생성한 Instance가 정상적으로 동작하고 있는 것을 확인 할 수 있다. 스크롤을 오른쪽으로 밀어보면 IP 주소 및 Public DNS 주소 등을 확인할 수 있다. 이제 SSH를 통해서 접근해 Instance를 조작할 것이다. 그런데, 우리의 목표는 웹서버 및 FTP 서버까지 모두 구현하는 것이기 때문에, 이를 위해서 해야 하는 일이 있다. 보안 정책을 설정하는 것이다. 좌측에 Network & Security - Security Groups로 들어간다.




필자는 이미 Security Group를 여러 번 설정해 사용해 본 적이 있어 여러 개의 Security Group이 있지만, 처음 사용한다면 launch-wizard-1 default 항목만 있을 것이다. 이중에 launch-wizard-1을 선택해 Inbound 탭을 클릭한다.




처음에는 SSH를 위한 22번 포트만 열려있을 것이다. FTP에 사용되는 포트는 20~21, HTTP에 사용되는 포트는 80번이기 때문에 이 포트들을 열어줘야 한다. Edit 버튼을 클릭한다.



Add Rule 버튼을 클릭해 위와 같이 구성하고 Save를 누르면 추가되는 것을 확인할 수 있다. 참고로, 자기 자신만 사용하거나 특정 IP에서의 요청만 받고 싶다면 Source 항목에 원하는 IP 주소를 넣어주면 된다.

이제 Security Group 설정이 끝났으니, SSH로 접속한다. PuTTY에서 접속하기 위해서 아까 다운로드 받았던 Key Pair를 인증서로 사용해야 한다. PuTTYGen을 실행시켜 .pem(Key Pair) PuTTY에서 사용할 수 있는 방식으로 바꿔준다.



Save Private Key 버튼을 클릭하고 반드시 원래 파일과 같은 이름으로 저장한다. 그러면 .ppk 파일이 생성될 것이다. Key Pair PuTTY를 통해 Instance SSH 접속을 진행한다.



다른 OS를 선택했다면 그 OS의 기본 사용자명을 ubuntu 대신 써주고, @ 뒤에 Instance Public DNS를 적어준다.



그리고 Connection – SSH – Auth 탭에 들어가서 아까 PuTTYGen으로 만들었던 .ppk 파일을 Browse해준다. 그리고 Open을 클릭하면 쉘이 정상적으로 출력되는 것을 확인할 수 있다.



 

APM Setup

Raspberry Pi에서 APM을 설치할 때와 크게 다르지 않다. 먼저 항상 그랬듯 apt-get을 업데이트 해준다.

sudo apt-get update

가장 먼저 apache를 설치해준다.


sudo apt-get install apache2


설치한 다음 Instance IP주소를 브라우저의 주소창에 쳐서 접속해본다. 다음과 같이 뜨면 정상적으로 설치된 것이다.


그리고 PHP를 설치한다.


sudo apt-get install php


php apache를 연동하기 위한 libapache-mod-php, MySQL과 연동하기 위한 php-mysql 패키지를 설치한다.


sudo apt-get install libapache2-mod-php

sudo apt-get install php-mysql


apache 서비스에 php를 연동시킨 작업을 적용하기 위해 서비스를 다시 시작해준다.


sudo service apache2 restart


apache의 기본 참조 경로인 /var/www/html로 이동해서 test.php를 만들고 다음과 같이 작성한다. 그리고 [Instance의 주소/test.php]를 브라우저에서 로드했을 때 다음과 같이 출력되면 정상적으로 php가 동작하고 있는 것이다.


<?php phpinfo ?>




마지막으로 MySQL을 설치한다.


sudo apt-get install mysql-server


root 계정의 비밀번호를 설정하라고 나오는데, 원하는 비밀번호로 설정하면 된다.


MySQL의 기본 Character-set을 변경한다. 변경해놓지 않으면 기본값으로 latin1 charset을 사용하기 때문에 추후 DB 작업을 할 시 문제가 생길 수 있다.

mysqld.cnf를 수정해주기 위해서 디렉터리를 /etc/mysql/mysql.conf.d로 이동한다.


cd /etc/mysql/mysql.conf.d

sudo nano mysqld.cnf


mysqld 맨 아랫줄에 아래 항목을 추가한다.


character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci



변경 사항을 적용하기 위해 mysql을 재시작한다.


sudo service mysql restart

 

FTP Setting

FTP 모듈을 설치한다.


sudo apt-get install vsftpd


FTP 설정을 변경하기 위해서 /etc로 이동해 conf 파일을 수정한다.


cd /etc

sudo nano vsftpd.conf


아래에 해당하는 옵션을 찾아서 아래와 같이 바꿔준다. 주석처리 되어 있으면 주석을 풀어준다.


listen = YES

anonymous_enable=NO

local_enable=YES

write_enable=YES


변경한 옵션을 적용하기 위해서 vsftpd를 재시작한다.


sudo service vsftpd restart


FTP 클라이언트로 접속할 때 /home/[계정명] 폴더로 이동하게 될텐데, 디렉터리에 접근할 수 있는 권한을 주지 못하면 FTP 클라이언트에서 FTP 서버의 파일들을 정상적으로 로드할 수 없기 때문에 권한을 변경해준다.


sudo chmod 755 /home


그리고 apache의 기본 참조 경로를 /home/ubuntu/www로 했을 때, www에는 작성 권한도 있어야 하기 때문에 www 폴더에 대해 권한 설정도 따로 해준다. (apache의 기본 참조 경로 설정은 Raspberry Pi 항목을 참조하자.)


sudo chmod 777 /home/ubuntu/www


이제 FTP 클라이언트로 접속해볼 차례이다. Raspberry Pi 서버에 FTP 클라이언트로 접속할 때는 그냥 호스트 주소와 사용자명, 비밀번호만 적고 연결하면 되었지만, Key Pair를 사용해 인증하고 접속하기 때문에 추가적인 설정이 필요하다.

FileZilla에서 편집-설정으로 들어간다.


 

연결-SFTP 탭으로 들어가서 Add Key File 버튼을 클릭해 아까 PuTTY에서 접속할 때 사용했던 .ppk파일을 선택해 등록해준다.



확인을 누르고 사이트 관리자로 들어간다. 사이트 관리자는 다음 그림에서 빨간 네모이다.



아래 사진과 같이 설정하고 확인, 연결한다.



아래와 같이 디렉터리와 파일들이 보이면 성공이다.


Posted by BinZIP
Network2017. 8. 4. 04:14

RaspberryPi를 이용한 Web/FTP 서버 구축

 

RaspberryPi를 이용해 Web/FTP 서버를 구축하여 웹 개발 환경을 구축해본다.

 

RaspberryPi Raspbian 설치하기

https://www.raspberrypi.org/downloads/raspbian/에 들어가서 Raspbian을 다운로드 받는다. Raspbian은 라즈베리파이용으로 개발된 데비안 계열 OS, GUI raspbian에서 제공하는 다른 선택 요소들이 필요하면 with desktop 버전을, 필수적인 요소만 필요한 경우에는 lite 버전을 설치하면 된다.



Raspberry Pi의 저장장치는 유일하게 Micro SD카드로 한정되어 있다. , SD카드에 Raspbian Flashing 하고 Raspberry PiSD카드를 삽입해 부팅해야 한다. Micro SD카드에 Flashing 하기 위한 툴로 ‘Etcher’를 사용하겠다.

https://etcher.io/



다운로드 받은 Raspbian 이미지를 선택하고 설치할 Storage를 선택하고 Flash를 누르면 위와 같이 SD카드에 Flashing 되는 것을 볼 수 있다.

LITE 버전은 GUI를 제공하지 않아 Terminal에서 조작해야 하므로, SSH raspberry pi를 조작하도록 하겠다.


여기서 주의할 점이 있다. Raspbian Flashing하고 바로 Raspberry Pi에 삽입해 SSH 툴로 접근하려고 하면 연결이 거부된다. 구 버전에서는 SSH 연결 허용 여부의 기본값이 허용이었던 것에 반해, 최신 버전은 SSH 연결 허용 여부가 보안상 문제로 허용하지 않는 것으로 바뀌었다. 이를 해결하기 위해서는 Flashing 작업이 끝난 다음에 해당 Storage에 들어가서 SSH라는 이름의 확장자 없는 파일을 생성해줘야 한다.


 

SSH로 접속하기 위해서 Raspberry Pi Local Address를 알아야 한다. 라즈베리파이로 부팅해 ifconfig를 실행해 확인하는 방법도 있고, 공유기 설정에서 연결된 장치를 확인해 주소를 알아낼 수도 있다. 이 과정은 간단하므로 사진을 생략한다.

 

Update FTP 설정

먼저 apt-get을 업데이트 해준다.


sudo apt-get update



Raspbian 구 버전은 일정 용량이 넘어서는 storage 같은 경우 storage의 용량 전체 중 일부만 인식해 따로 확장하는 과정이 필요했지만, 최신 버전은 storage의 원 용량 그대로 사용할 수 있다.




이제 ftp 모듈을 설치한다.

sudo apt-get install vsftpd


설치 후 vsftpd의 설정을 수정한다.


sudo vi /etc/vsftpd.conf



listen = YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

해당하는 것을 찾아서 위와 같은 옵션으로 바꾸어주고 저장한다. 바꾼 옵션을 적용하기 위해서 vsftpd를 재시작한다.


sudo service vsftpd restart



이제 정상적으로 작동하는지 ftp 클라이언트를 이용해 로그인해본다. 널리 쓰이는 ftp 클라이언트로는 filezilla가 있다.



호스트에 Raspberry Pi Local Address, 사용자명에 pi, 비밀번호에 pi의 비밀번호를 입력하고 빠른 연결을 클릭하면 정상적으로 연결되는 것을 확인할 수 있다.



 

APM 설정

APM Apache + PHP + MySQL을 뜻한다. APM을 사용하는 웹서버를 구성해보겠다.


sudo apt-get install apache2

sudo service apache2 start


설치 후, apache가 잘 실행되고 있는지 확인해본다.


ps –ef|grep apache



잘 실행되고 있는 것을 볼 수 있다. Raspberry PiLocal Address를 브라우저의 URL 입력란에 입력해서 접속해보면 다음과 같은 페이지를 볼 수 있다.



Apache가 설치되었을 때 웹 페이지 구성 파일의 기본 참조 경로는 /var/www/html이다. 필자는 이것을 ftp 서버와 연동해서 사용하고 싶기 때문에 /home/pi/kiwi/www로 경로를 변경하고 싶다.



기본 참조 경로를 변경하기 위해서는 /etc/apache2/apache2.conf 파일과 /etc/apache2/sites-available/000-default.conf 파일을 수정해야 한다.



apache2.conf 파일에서 세번째 <Directory [dir]>에서 dir 부분을 원하는 경로로 수정한다. 앞서 말했듯, 기본값은 /var/www이다.



000-default.conf에서는 빨간 네모친 부분만 위와 같이 수정해주면 된다. 당연히 서버 이름과 allias, admin은 마음대로 작성해도 되고, DocumentRoot 항목만 원하는 경로로 수정하면 된다.

정상적으로 참조 경로가 바뀌었는지 확인하기 위해, 해당 경로로 이동해 index.html을 대충 작성한다.





 

이제 PHP를 설치한다.


sudo apt-get install php

sudo apt-get install libapache2-mod-php


설치 후 test.php를 다음과 같이 작성하고 [Raspberry Pi Local Address]/test.php를 입력해 정상적으로 출력되는지 확인한다. 당연히 test.phpapache2의 참조 경로에 위치하고 있어야 한다.


<?php

phpinfo();

?>



결과는 다음과 같다.



 

마지막으로 mysql을 설치한다.


sudo apt-get install mysql


php와 연동하기 위해서 php-mysql 패키지를 설치한다.


sudo apt-get install php-mysql


실제로 사용할 생각은 없지만 php와 연동해 DB를 관리할 수 있게 도와주는 phpmyadmin도 설치해본다.


sudo apt-get install phpmyadmin


설치 후 URL에 경로를 입력하는 것 만으로 사용하고 싶다면 phpmyadmin 폴더를 변경한 참조 경로로 옮겨줘야 한다.



 

외부에서의 접근 허용

지금까지 설정한 것이 공유기가 아닌 직접 WAN에 연결했다면 Raspberry Pi가 단순히 위에서 했던 작업들만 거치면 아이피를 입력했을 때 외부에서 이미 접근이 허용되었을 것이다. 하지만 대부분의 경우 WAN을 공유기에 연결하고 공유기에 데스크톱, Raspberry Pi 등을 연결해 사용하기 때문에, 공유기에서 포트포워딩 설정을 해주는 과정을 거쳐야한다.

먼저 Raspberry Pi가 공유기에 접속할 때 마다 다른 Local Address를 가지게 되면 굉장히 귀찮아지기 때문에 주소를 고정시켜준다. (공유기는 DHCP 방식으로 Local IP를 접속한 순서대로 할당해주기 때문에 주소가 바뀔 수 있다.)



그 후 포트포워딩 설정에 들어가서 Raspberry Pi 80번 포트로 포워딩 시켜준다.



위와 같이 80번 포트 뿐 아니라 22번 포트도 포워딩 시켜주게 되면 Local Network가 아니더라도 언제든지 putty를 이용해 Raspberry Pi SSH 접속을 할 수 있다.

또한 FTP 서버는 20~21번 포트를 사용하기 때문에 외부에 열린 포트를 20~21번 포트에 포워딩 시키면 외부 네트워크에서 FTP 서버를 사용할 수 있다.

Posted by BinZIP