SSH - SSH (Secure Shell) 기초
당신은 아마 서버가 무엇인지 알 것이며,
또다른 장치에서 명령어를 입력하는 것 만으로 어디서든 서버를 접속 할 수 있다는 것을 알 겁니다.
SSH는 서버와 연결하는 데 평범한 보안 메서드입니다.
SSH 서버를 어떻게 셋업하는지 탐색하며,
우리가 장치 간에 생성 해 놓은 SSH 커넥션 예제를 살펴보며 이에 접근 할 겁니다.
당신의 데스크톱 컴퓨터나 랩탑, 또 다른 데스크톱, 혹은 스마트폰이 될 수 있습니다.
또한 우리는 몇 가지 SSH 에 대한 실전적인 어플리케이션을 보게 될 겁니다.
SSH 커넥션을 넘어 파일을 복사하는 것 처럼요.
What is SSH and how to set SSH server and client?
- SSH는 무엇이고, 서버와 클라이언트는 어떻게 세팅하나요?
SSH의 약자는 (secure shell)의 약자입니다.
여기서 secure 인 이유는, 모든 정보가 암호화되었기 때문입니다.
SSH 커넥션을 위한 몇 가지 프로그램이 있는데,
가장 유명한 것은 OpenBSD 프로젝트로 만들어진 OpenSSH가 있습니다.
이 도구는 유닉스 바탕의 시스템과 심지어 윈도우까지 포함합니다.
대부분의 패키지 매니저는 이를 가지고 있으며, 많은 배포판들이 있습니다.
이는 기본으로 설치됩니다.
SSH 는 client-server 아키텍처로 사용됩니다.
이는 두 개의 컴퓨터가 SSH로 커넥팅 하기 위해서는 두 장치에 모두 설치되어야 한다는 것을 의미합니다.
서버에 SSH를 세팅 하기 위해서는 일단 서버 컴포넌트에 서버용 SSH를 설치해야 하며,
서버로 들어가기 위해서는 당신이 사용하는 장치에 클라이언트용 SSH를 설치해야 합니다.
첫 번째로, 홈 데스크탑에 SSH의 서버 컴포넌트를 설치 해 봅시다.
만약 당신이 Debian 베이스의 배포판이라면, 이 명령어를 사용하세요.
$ sudo apt install openssh-server
다른 배포판에서도 명령어들은 비슷합니다.
또한, 패키지 이름도 약간만 다릅니다.
SystemD (시스템 데몬) 을 가동하는 시스템에서 SSH-server를 가동하고 시작하려면 :
$ sudo systemctl enable ssh # enable ssh such that it will start every time the system boots up
$ sudo systemctl start ssh # start it now
$ sudo systemctl status ssh # check its status
다른 초기화 시스템이 있는 시스템에서도, 명령어는 비슷합니다.
공통 된 흐름은 - 첫 번째로 가동시키고 나서, 시작한다.
아마 방화벽을 구성 할 필요가 있을 겁니다.
Uncomplicated firewall (UFW) 는 이 방식으로 다룰 겁니다 :
$ sudo ufw allow OpenSSH
당신의 두 번째 장치에서는(클라이언트 장치) , SSH 클라이언트 프로그램을 설치해야 합니다.
APT로 설치하기 위해서, 이를 실행하세요 :
$ sudo apt install openssh-client
How to get into a server with SSH - SSH로 서버 들어가는 법
이제 당신은 SSH 서버와 클라이언트를 가졌습니다.
따라서, 커넥션을 만들어 볼 수 있습니다.
이를 위해서, ssh
명령어를 치고 나서, 서버에 있는 당신의 username 을 치고, 서버의 IP 주소를 타이핑하세요.
여기 ssh
명령어에 대한 예제가 있습니다 :
$ ssh jason@104.21.85.36
만약 당신이 서버의 username을 지정하지 않는다면, 시스템에서 root 패스워드를 물어 볼 겁니다.
또한, 당신은 ~/.ssh/config
주소에 구성 파일을 생성하여 IP 주소와 username을 작성 할 수 있습니다.
예를 들어 :
Host my-ssh-server
hostname 104.21.85.36
user mdukuzi
이 예제에서 당신에게 서버 이름 my-ssh-server
라는 예시를 줬지만,
당신은 호스트에 대한 다른 이름을 선택 할 수 있습니다.
이 구성 파일과 함께, 서버에 접속하기 위해 이러한 명령어를 사용 할 수 있습니다 :
$ ssh my-ssh-server
성공적으로 올바른 패스워드를 입력 한 뒤, 처음인 만큼 확인에 대한 질문을 받을 겁니다.
당신의 IP address 와 키를 위한 지문도 ~/.ssh/known_hosts
에 추가 될 겁니다.
이제 당신은 서버에서 작업 할 수 있습니다!
커넥션을 닫기 위해서 그냥 exit
명령어를 타이핑하면 됩니다.
Secure way - 보안 방법
연결하는 데 대체적이며, 더 보안적인 방식이 있습니다. - private (보안 키) 와 public (공개 키) key 를 사용하는 겁니다.
첫 번째 스텝은 공개 키와 비밀 키 쌍을 생성하는 겁니다.
당신이 서버에 아직 로그인 하지 않았을 때, 이 명령어를 치세요 :
$ ssh-keygen
위의 명령어는 GitHub와 같은 다른 웹사이트들에 대해 키를 생성하는 용도로 사용 할 수 있습니다.
이후, 당신은 키에 대한 이름와 위치를 지정하거나,
~/.ssh
디렉토리와 id_rsa
이름과 같은 기본 세팅을 그대로 내버려 둘 수 있습니다.
또한, 암호를 선택하라고 물어볼 수도 있는데,
만약 당신이 선택하고 싶지 않다면, 어떠한 것도 치지 마세오.
최종적으로, 당신은 선택 된 디렉토리에 2 개의 키를 가져야 합니다 : 비밀키와 공개키. 공개키는 .pub
확장자입니다.
그리고 나서 서버 디렉토리 ~/.ssh
의 authorized_keys
파일에 당신의 공개 키를 추가하세요.
이를 더 쉽게 하려면 ssh-copy-id
명령어를 사용하세요.
이 명령어는 .ssh
디렉토리를 생성하며, authorized_keys
파일이 없다면, 자동으로 생성합니다.
$ ssh-copy-id -i ~/.ssh/id-key.pub my-host-server
이제 당신이 서버에 로그인 할 때, 키를 사용하기 위해서 암호를 묻는 메세지가 표시되거나,
이전에 키를 만드는 과정을 건너뛰었다면, 묻지 않을 겁니다.
위의 과정은 주로 작동 되지만,
만약 ssh
가 여전히 비밀 키를 위한 비밀번호가 아닌, 당신의 비밀번호를 묻는다면,
당신의 SSH-config 파일에 밑의 라인을 추가하세요.
IdentityFile id-rsa
이 라인에 있어 id-rsa
는 당신의 비밀 키 이름입니다.
How to copy files from the server - 서버로부터 파일 복사하는법
이제 SSH로 뭘 좀 해 봅시다.
예를 들어, 서버로부터 몇 개의 파일을 복사하거나, 그 반대도 말이죠.
이를 위해서, 우리는 scp
명령어를 사용 할 겁니다.
SSH 서버에 들어가기 위해서 ssh
명령어를 사용 할 필요가 없다는 것을 기억하세요.
서버로부터 manifest
파일을 복사하기 위해서 우리의 로컬 머신에서는 :
$ scp my-host-server:~/Documents/manifest ~/Project/
scp
이후에, config(구성) 파일에 있는 서버의 이름을 입력하고 (혹은 서버의 username@ip-address),
이후에 :
사인을 입력 한 뒤, 서버 공간에 있는 파일의 경로를 입력하세요.
그리고 나서 당신의 로컬 머신에 파일을 복사 할 경로를 입력하세요.
로컬 장치로부터 파일을 복사하고 싶다면, 로컬 장치의 파일 경로를 입력 한 후,
서버의 이름 그 다음에 :
사인을 입력하고, 서버에 복사 할 경로를 입력합니다.
$ scp ~/Project/ my-host-server:~/Documents/manifest
Conclusion - 결론
우리가 논의한 주요 포인트들을 비춰 보겠습니다.
지금 당신은 이러한 것들을 할 줄 압니다 :
openssh-server
프로그램을 설치해서 SSH 서버를 셋업하는 법ssh
명령어를 사용해서 서버와 연결하는 법ssh-keygen
과ssh-copy-id
명령어를 사용해서 비밀번호 없는 보안을 셋업하는 법scp
명령어를 사용해서 파일 전송하는 법 (서버 <==> 로컬 머신)
이는 SSH의 기본적인 개요밖에 되지 않으며,
인터넷을 통해 어떠한 장소에서 서버와 작업을 시작하기에는 충분치 않습니다.
words to remember
that's to say : ~와 같은
passphrase : 암호