Ubuntu 22.04에는 기본적으로 openssh-server가 설치되어 있지 않습니다. ssh 접속이 가능하도록 Ubuntu ssh 접속 허용 설정과 접속 방법, 그리고 꿀팁으로 ssh 키 쌍을 사용하여 편하게 ssh 서버에 접속하는 방법까지 알아보겠습니다.
목차
Ubuntu ssh 접속 허용 개요
우분투 리눅스에서 ssh 서버에는 openssh-client 명령줄 도구인 ssh를 이용해서 접속합니다. 기본적으로 openssh-client 도구는 설치 돼 있습니다. 하지만 접속하고자 하는 우분투 서버에 ssh 서버가 설치되어 있지 않으면 ssh/sftp 접속을 할 수 없습니다. 따라서 ssh 서버를 설치해 주어야 합니다.
Ubuntu ssh/sftp 접속 허용을 위해 ssh 서버 설치
우분투 운영체제의 패키지 정보를 최신의 리포지터리 정보로 업데이트하기 위해서 아래 명령을 우선 실행합니다.
sudo apt update
ShellScript이제 아래 명령을 사용해서 ssh 서버를 설치해 줍니다.
sudo apt install openssh-server
ShellScript명령어를 실행하면 설치할 패키지 목록이 보여지고, 계속해서 설치할 것인지 물어봅니다. Y를 눌러줍니다.
ssh 서버 IP 주소 확인 방법
ssh 서버에 접속하려면 당연히 주소가 있어야겠죠? 서버에서 ifconfig 또는 ip a 명령을 사용해서 해당 기기의 IP 주소를 확인할 수 있습니다. enp로 시작하는 디바이스의 IP 주소를 확인한 결과 저의 경우에는 VM으로 ubuntu를 설치했기 때문에192.168.0.3이라고 나왔습니다.
ifconfig 명령이 없다고 하면
ifconfig 명령이 없는 경우에는 아래와 같이 net-tools를 설치한 후 이용하면 된다고 안내 메시지가 나옵니다.
아래와 같이 net-tools를 설치한 후 ifconfig 명령을 이용하거나 ip a 명령을 사용하면 됩니다.
sudo apt install net-tools
ShellScript클라이언트에서 ssh 서버에 접속하기
클라이언트에서 ssh 서버에 접속하는 건 명령줄 도구(cli) ssh를 이용해서 접속합니다. 위에서 ssh 서버의 계정은 위에서 보시다시피 vm1 입니다. 따라서 ssh vm1@192.168.0.3 명령을 이용해서 접속합니다. Are you sure you want to continue connecting? 이라는 질문에서 yes를 입력하고 엔터를 치면, 클라이언트의 ~/.ssh/known_hosts 파일에 접속하려는 서버에 대한 정보가 등록됩니다. 이제 ssh 서버의 vm1 계정의 비밀번호를 입력해서 접속합니다.
클라이언트에서 sftp 서버에 접속하기
sftp 서버 역시 openssh-server를 이용하게 됩니다. 동일한 서버에 sftp로 접속한다면 아래와 같이 접속하면 됩니다. 또는 그 외의 sftp client 어플리케이션을 활용하면 됩니다.
sftp vm1@192.168.0.3
ShellScriptSSH 서버의 포트 설정하기
SSH 서버의 기본 포트는 22번입니다. 그 얘긴 22번 포트라면 누구나 접속을 시도할 수 있다는 것입니다. 공격자들은 특정 포트로 공격하는 시도를 계속 하지요. 그런 시도를 완전히 없앨 수는 없겠지만, 최소한 포트를 22로 설정하지 않으면 외부의 침입자로부터 뻔하게 당할 수 있는 공격을 막을 수 있습니다.
라우터 단에서 포트 포워딩을 해서 12345번 포트로 들어오는 것을 22번으로 넘겨줄 수도 있지만, 여기에서는 ssh 서버 자체의 포트 번호를 세팅하는 방법을 알아보겠습니다.
ssh 서버의 설정파일은 /etc/ssh/sshd_config입니다. 해당 파일은 root 계정이 소유자이므로 sudo nano 명령을 이용해서 편집하도록 하겠습니다.
sudo nano /etc/ssh/sshd_config
ShellScript#Port 22 라고 적혀있는 곳이 있습니다. 포트번호를 별다른 설정하지 않아도 22번으로 설정되는 부분입니다.
저는 그 아래에 사용할 포트번호를 12345로 지정하기 위해서 Port 12345라고 적었습니다. Ctrl + O를 눌러 저장하고 Ctrl + X로 빠져나옵니다.
이제 변경한 설정을 적용해야 합니다. 변경한 sshd_config를 적용하기 위해서는 다음 명령어를 사용해서 sshd를 재시작 해 주시면 됩니다.
systemctl restart sshd
ShellScript아무 반응이 없이 명령 프롬프트가 뜨면 제대로 ssh 데몬이 재시작된 것입니다. 참고로 sshd의 d는 데몬을 의미합니다. 주로 서버를 제작할 때 리눅스에서는 관례적으로 명령어에 d를 붙이는 방식으로 많이 사용합니다.
이제 ssh 서버의 포트를 변경했으니, 변경한 포트로 접속해야겠죠. 이제 클라이언트에서 ssh 서버의 변경된 포트 12345로 접속해 보도록 하겠습니다. “-p 포트번호” 형식의 옵션을 추가해 주시면 됩니다.
ssh -p 12345 vm1@192.168.0.3
ShellScript만약 포트 번호를 지정하지 않으면 22번 포트로 접속하려고 할 것이기 때문에, 22번 포트에 대한 접속이 허용되어 있지 않으면, 아래와 같이 22번 포트로의 연결이 거부되었다는 메시지를 보게 됩니다.
SSH 키 쌍으로 편하게 또는 보안 수준을 높여 ssh 접속하기
ssh 키 쌍을 이용하면 편하게 접속할 수도 있고, 혹은 안전하게 접속할 수도 있습니다. 어떻게 그럴 수 있는지 살펴보겠습니다.
우선 ssh 키 쌍에 비밀번호를 설정하지 않으면, 클라이언트에서 비밀번호를 입력하지 않고 바로 접속할 수 있습니다. 상용 클라우드 서비스에서도 보통 그렇게 키를 내줍니다. 한편 보다 안전하게 보안을 유지하고 싶다면, vm1의 계정 비밀번호를 입력하는 것보다는 ssh 키 쌍의 비밀번호를 입력하는 편이 더 안전할 것입니다. ssh 키가 안전하지 않다 싶으면 ssh 키 쌍을 바꿔버리면 되니까요.
‘공개키와 개인키가 뭐지?’하는 분들 계시죠? 먼저, ssh 키 쌍을 만들어서 ssh 서버에 만든 공개키와 개인키로 인증하는 개념에 대해 간단히 살펴보겠습니다. 우선 공개키와 개인키라는 이름은 클라이언트를 기준으로 합니다. 클라이언트에서 개인키와 공개키를 만들면, 개인키는 클라이언트가 갖고 있고, 공개키는 외부에 공개할 수 있는 키가 되겠죠. 개념 이해되셨죠?
SSH 키 비밀번호 없이 이용하기
그럼 이제 개인키와 공개키를 생성하고, 서버에 공개키를 등록해 보겠습니다. 우선 비밀번호 없는 키 쌍을 만들어 보겠습니다.
ssh-keygen -t rsa -b 4096 -m PEM
ShellScriptEnter passphrase에서 그냥 엔터를 치면 비밀번호가 없는 키가 만들어집니다. 만들어진 키는 화면의 설명과 같이 ~/.ssh 아래에 개인키는 id_rsa로 공개키는 id_rsa.pub로 만들어집니다.
cat ~/.ssh/id_rsa.pub
ShellScript아래와 같이 공개키의 내용이 나온다.
이제 클라이언트의 공개키를 복사해서 서버에 아래와 같은 명령어를 입력해 주면, ~/.ssh/authorized_keys에 해당 공개키의 내용이 추가됩니다. 이제 ssh 서버는 등록한 해당 공개키의 쌍인 개인키를 이용한 ssh 접속을 허용하게 됩니다.
echo "키내용" >> ~/.ssh/authorized_keys
ShellScript그러면 ssh 서버에 비밀번호 없이 해당 개인키로 접속할 수 있게 된다.
SSH Key 쌍에 비밀번호 설정해서 보안 수준을 높이기
앞서 SSH 키를 생성하는 과정에서 Enter passphrase 과정에서 비밀번호를 입력하면 비밀번호가 있는 키 쌍이 생성됩니다. 키 생성 명령어부터 ssh 서버의 authorized_keys 등록하는 과정까지는 모두 동일하니 자세한 과정은 생략하겠습니다.
비밀번호를 적용한 SSH 키 쌍 생성이 끝났다면 아래와 같이 입력하여 서버에 접속합니다.
ssh vm1@192.168.0.3
ShellScript접속하려고 하면 아래와 같은 개인키의 비밀번호를 물어봅니다. 키 생성시에 입력한 비밀번호를 입력해 주시면 됩니다. 아래의 Automatically unlock this key whenever I’m logged in에 체크해 주시면 앞으로 개인키 비밀번호를 별도로 입력하지 않으셔도 됩니다.
정리
여기까지 SSH 서버를 서버에 설치하고, SSH 서버의 포트 번호도 변경해 보았습니다. 그리고 클라이언트에서는 SSH 서버의 사용자 계정으로도 로그인 해보고, SSH 키 쌍을 생성하고 서버에 공개키를 등록해서 개인키로도 접속해 보았습니다. 비밀번호를 설정하지 않고도, 또 비밀번호를 설정해서도 접속해 보았습니다.
우분투에서 SSH 서버를 띄우고 접속하는 방법이 궁금하셨던 분들께 도움이 되길 바랍니다.
책 소개
한빛미디어에서 출판하고 이종원님이 집필한 우분투 리눅스: 시스템 & 네트워크 3판이 있습니다. 기본적으로 필요한 리눅스 기초 사용법, 리눅스 시스템 관리방법 그리고 리눅스 네트워크 활용법에 이르기까지 많은 내용이 정리되어 있습니다. 책에 관심이 있는 분은 아래 링크를 이용해서 책을 구입하시면 블로그 운영에 도움이 됩니다.
무료배송 국내도서 | 쿠팡
15U50R-GR5CK
SSD: 256GB~2TB / RAM: 8~24GB
OS: Free DOS / Win11 Home / Win11 Pro 무료배송 노트북 | 쿠팡
참고자료
openssh의 sshd_config 매뉴얼을 참고하시면 보다 상세한 ssh 서버 설정이 가능합니다.
ssh-keygen의 man 페이지를 확인하시면 옵션에 대한 자세한 내용을 확인할 수 있습니다.
소제목: 서버 ip주소 확인하는 법
내용 1: 디바이스 ip 확인했어요!
내용 2: 클라 ip 말고 서버 ip를 확인해야 합니다!
끝
???
혼란님. 제 의도는 서버의 ip 주소와 클라이언트 ip 주소를 헷갈리는 분들이 있을까봐 설명을 한다고 했는데, 지금 다시 읽어보니 불필요한 설명인 듯 싶어, 피드백 반영해서 내용 수정했습니다. 고맙습니다^^
“ssh 서버의 포트를 변경했으니, 변경한 포트로 접속해야겠죠. 이제 클라이언트에서 변경된 포트 12345”
서버에서 변경된 포트 12345 말씀하시는 거죠?
클라이언트에서 서버의 변경된 포트로 접속하면 된다는 의미였습니다. 그런데 말씀하신 것처럼 ‘클라이언트에서 변경된 포트 12345’라는 말만 보면 앞의 맥락은 서버의 포트를 변경한 것인데, 마치 클라이언트의 포트를 변경한 것처럼 오해할 수 있겠네요. 방문하는 분들께 도움이 되고 싶은 마음인데, 자꾸 혼란을 드리게 되어 죄송합니다. 전체적으로 글을 좀 더 잘 다듬어 보도록 하겠습니다. 그나저나 이리 부족한 글에 다시 방문하고 피드백 해주시다니 정말 고맙습니다.