이번 글에서는 Linux 환경에서 OpenSSH를 설치하고 활성화되었는지 확인해보겠습니다.
또한 OpenSSH를 활성화 시킨 후 OpenSSH를 이용하여 원격 서버에 로그인 세션을 여는 방법을 다뤄보겠습니다.
OpenSSH 패키지
다음 그림 처럼 원격 서버에 로그인할 때 로컬 PC는 원격 서버의 클라이언트로 작동하므로 로컬 PC에서는
openssh-client 패키지를 사용한다.
그러나 로그인할 원격 서버의 OS는 셸 세션의 호스트로 작동하므로 openssh-server 패키지를 실행해야한다.
OpenSSH 설치 및 실행
OpenSSH가 설치되어있지 않다면 다음 명령어를 통하여 설치할 수 있습니다. (클라이언트 혹은 서버)
apt install openssh-server
혹은
apt instasll openssh-client
하지만 배포판 리눅스의 대부분은 최소한의 SSH 기능을 기본으로 설치하기 때문에 dpkg 패키지 관리자를 통하여 확인해 보겠습니다.
dpkg는 APT 시스템에 속한 소프트웨어 패키지들을 관리하고 상태를 확인하는 명령어 입니다.
-s 옵션으로 설치 및 업데이트의 상태까지 출력할 수 있습니다.
dpkg -s openssh-server
혹은
dpkg -s openssh-client
서버 버전에는 클라이언트 패키지에 있는 도구도 모두 들어 있습니다.
즉, openssh-server 패키지가 설치된 컴퓨터에서는 ssh로 다른 서버에도 로그인할 수 있습니다.
(보안 모범 사례에 인프라에 대한 접근 경로는 절대적으로 필요한 곳으로만 제한해야하므, 데스크톱이나 노트북 등 로그인할 필요가 없으면 openssh-client만 설치해야 합니다.)
ssh가 활성화 되어 있어야 OpenSSH를 사용할 수 있으므로, systemctl status 명령어로 컴퓨터에서 SSH가 실행 중인지 확인할 수 있습니다.
systemctl status ssh
Active : active (running) 으로 되어있으므로 현재 SSH는 실행 중이며, 할당된 PID 는 1201인 것을 확인할 수 있습니다.
만약 SSH가 실행되고 있지 않으면 다음 명령어를 통하여 실행시킵니다.
systemctl start ssh
사용이 끝나고 프로세스를 종료시킬 때는 다음 명령어를 입력합니다.
systemctl stop ssh
SSH 같은 서비스를 시스템이 부팅될 때 자동으로 실행되게 할 수 있는데, system enable 명령어를 사용합니다. 반대로 비활성화 할때는 systemctl disable ssh 명령어를 사용합니다.
systemctl enable ssh
SSH로 원격서버에 로그인하기
우선 접속할 컴퓨터의 IP 주소를 확인합니다. LXC 컨테이너를 사용하고 있다면, lxc-ls --fancy 명령어로 필요한 정보를 얻고, Docker container를 사용하고 있다면 Docker inspect 명령어를 통해 확인합니다. 또는 서버에 로그인한 상태라면
ip addr 명령어로 현재 컴퓨터의 ip 주소를 가져올 수 있습니다.
저는 LXC 컨테이너가 실행 중이므로 LXC 컨테이너에 접속해보겠습니다.
먼저 ip를 확인합니다.
# sudo lxc-ls --fancy
NAME STATE AUTOSTART GROUPS IPV4 IPV6
myContainer RUNNING 0 - 10.0.3.179 -
접속할 ip주소는 10.0.3.179 입니다.
이제 서버의 IP 주소와 서버에 로그인할 계정명과 함께 ssh 명령어를 실행하면 됩니다.
서버에 처음으로 접속한다면 서버의 OpenSSH 프로그램이 보낸 정보가 맞는지 확인하고 'yes'를 입력해야합니다.(정확하게 입력해야합니다.) 그 후 지정한 서버 계정의 패스워드를 입력하면 됩니다.
결과
# ssh ubuntu@10.0.3.179
The authenticity of host '10.0.3.179 (10.0.3.179)' can't be established.
ECDSA key fingerprint is SHA256:aJhHRKVBBQyYKQiNKthD/zn0SlWFuDkjfqlo2+sFLNM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.3.179' (ECDSA) to the list of known hosts.
ubuntu@10.0.3.179's password:
Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-176-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@myContainer:~$ ^C
4번째 줄에서 yes를 입력하였고, 6번째 줄에서 password 입력 후 ssh 로그인이 되어 ubuntu@myContainer로 프롬프트 변경된 것을 확인할 수 있습니다.
이후 ip addr 명령어를 입력하면, 위에서 접속 시도한 ip주소가 eth0에 나타나는 것이 확인됩니다.
패스워드 없이 SSH 접근하기
SSH의 패스워드 인증 대안으로 특별한 키 쌍을 생성한 다음 로그인하려는 원격 호스트에 공개 키를 복사하는 방법이 있습니다. 암호화 키가 연결의 양쪽 끝에 있으므로 호스트에 실행되는 OpenSSH는 패스워드 없이 로그인하려는 사용자가 누구인지 알 수 있습니다.
인프라에서 패스워드가 긍정적인 역할을 하지 않는 것은 아닙니다. 이상적으로는 키 쌍을 사용하기전에 로컬에서 패스프레이즈(passphrase)라는 것을 생성하고 이것을 이용하여 인증하여야 합니다.
여기서는 ssh-keygen 을 통하여 키 페어를 생성하겠습니다. ssh-keygen을 입력하면 RSA 암호 알고리즘을 기반에 둔 공개 키와 개인 키 쌍을 생성합니다. Enter를 눌러 기본 이름을 사용하면 id_rsa라는 이름의 키쌍이 생성됩니다.
ssh-keygen
이제 ls -l 명령어를 이용하여 .ssh 디렉토리 내용을 살펴보면 id_rsa파일이 생성됩니다. 이 중 하나에는 .pub 파일 확장자가 붙어 있는데, 이 파일이 키 쌍의 공개 키 부분이며, 이 파일을 로그인할 원격 서버에 복사해야합니다.
ls -l .ssh
이제 이 공개 키를 호스트에 복사해야합니다. 일반적으로 키 쌍은 클라이언트에서 생성합니다. 이 키쌍의 공개키를 호스트의 .ssh/authorized_keys 파일로 복사하면 클라이언트에서 개인 키로 서명한 암호 메시지가 진짜인지 실행되는 OpenSSH가 검증할 수 있습니다. 메시지가 검증되면 SSH 세션이 시작됩니다.
우선 공개키를 /home/ubuntu 디렉토리의 .ssh 디렉토리에 복사해야 하는데, .ssh 디렉토리가 없으면 mkdir 명령어로 생성합니다.
# ssh ubuntu@10.0.3.179 mkdir -p .ssh
ubuntu@10.0.3.179's password:
이제 다음 명령어를 입력하여 local의 키파일을 ssh를 통하여 host의 .ssh/authorized_keys라는 파일에 추가해줍니다.
cat .ssh/id_rsa.pub \
| ssh ubuntu@10.0.3.179 \
"cat >> .ssh/authorized_keys"
ubuntu@10.0.3.179's password:
cat 명령어를 읽어 ssh를 통하여 로그인 후 파이프로 전달합니다. 마지막으로 원격에서 다시 읽고 이를 authorized_keys라는 파일에 추가합니다.
파일이 정상적으로 생성되었다면, 이제 기존의 ssh 명령어를 실행할 때 패스워드 입력하지 않아도 됩니다.
다중 암호화 키를 이용할 경우 ssh의 -i 플래그 뒤에 개인 키 파일의 이름과 위치를 지정하면 됩니다.
AWS EC2에서는 .pem 확장자 파일을 이용하므로 .pem 키 파일을 추가하는 예시는 다음과 같습니다.
ssh -i .ssh/mykey.pem ubuntu@10.0.3.179
Linux에서 OpenSSH를 사용하는 법을 다루어 보았습니다.
'About > Linux' 카테고리의 다른 글
[Linux] LVM(Logical Volume Manager) 구성하기(CentOS 7) (0) | 2022.05.26 |
---|---|
[Linux] rsync로 아카이브 동기화(Linux 백업 동기화) (2) | 2021.07.19 |
[Linux] find 명령어로 파일 모으기(특정 파일만 압축하기) (0) | 2021.06.05 |
[Linux] Ubuntu에서 ssh 통신을 이용한 tar 아카이브 원격 저장 (0) | 2021.05.16 |
[Linux] Ubuntu에서 LXC 컨테이너 사용하기 (0) | 2021.05.12 |