웹사이트 검색

SSH를 사용하여 원격 서버에 연결하는 방법


소개

시스템 관리자가 숙달해야 하는 필수 도구 중 하나는 SSH입니다.

SSH 또는 Secure Shell은 원격 시스템에 안전하게 로그온하는 데 사용되는 프로토콜입니다. 원격 Linux 서버에 액세스하는 가장 일반적인 방법입니다.

이 가이드에서는 SSH를 사용하여 원격 시스템에 연결하는 방법에 대해 설명합니다.

핵심 구문

SSH를 사용하여 원격 시스템에 연결하려면 ssh 명령을 사용합니다.

Windows를 사용하는 경우 터미널에서 ssh를 사용하려면 OpenSSH 버전을 설치해야 합니다. PowerShell에서 작업하는 것을 선호하는 경우 ssh 명령을 포함하는 기본 Windows bash 터미널 환경을 제공하는 Windows용 Git을 따를 수 있습니다. 이들 각각은 잘 지원되며 사용하기로 결정한 것은 선호도에 따라 결정됩니다.

Mac 또는 Linux를 사용하는 경우 터미널에서 이미 ssh 명령을 사용할 수 있습니다.

명령의 가장 간단한 형식은 다음과 같습니다.

  1. ssh remote_host

이 예에서 remote_host는 연결하려는 IP 주소 또는 도메인 이름입니다.

이 명령은 원격 시스템의 사용자 이름이 로컬 시스템의 사용자 이름과 같다고 가정합니다.

사용자 이름이 원격 시스템에서 다른 경우 다음 구문을 사용하여 지정할 수 있습니다.

  1. ssh remote_username@remote_host

서버에 연결되면 비밀번호를 제공하여 신원을 확인하라는 메시지가 표시될 수 있습니다. 나중에 비밀번호 대신 사용할 키를 생성하는 방법을 다룰 것입니다.

ssh 세션을 종료하고 로컬 쉘 세션으로 돌아가려면 다음을 입력하십시오.

  1. exit

SSH는 어떻게 작동합니까?

SSH는 클라이언트 프로그램을 sshd라는 ssh 서버에 연결하여 작동합니다.

이전 섹션에서 ssh는 클라이언트 프로그램이었습니다. ssh 서버는 우리가 지정한 remote_host에서 이미 실행 중이었습니다.

거의 모든 Linux 환경에서 sshd 서버가 자동으로 시작되어야 합니다. 어떤 이유로든 실행되고 있지 않으면 웹 기반 콘솔 또는 로컬 직렬 콘솔을 통해 일시적으로 서버에 액세스해야 할 수 있습니다.

ssh 서버를 시작하는 데 필요한 프로세스는 사용 중인 Linux 배포판에 따라 다릅니다.

Ubuntu에서는 다음을 입력하여 ssh 서버를 시작할 수 있습니다.

  1. sudo systemctl start ssh

그러면 sshd 서버가 시작되고 원격으로 로그인할 수 있습니다.

SSH 구성 방법

SSH 구성을 변경하면 sshd 서버의 설정이 변경됩니다.

Ubuntu에서 기본 sshd 구성 파일은 /etc/ssh/sshd_config에 있습니다.

편집하기 전에 이 파일의 현재 버전을 백업하십시오.

  1. sudo cp /etc/ssh/sshd_config{,.bak}

nano 또는 선호하는 텍스트 편집기를 사용하여 엽니다.

  1. sudo nano /etc/ssh/sshd_config

이 파일에 있는 대부분의 옵션은 그대로 두는 것이 좋습니다. 그러나 다음과 같은 몇 가지 사항을 살펴보고 싶을 수 있습니다.

Port 22

포트 선언은 sshd 서버가 연결을 수신할 포트를 지정합니다. 기본적으로 이것은 22입니다. 특별한 이유가 없는 한 이 설정을 그대로 두어야 합니다. 포트를 변경하는 경우 나중에 새 포트에 연결하는 방법을 알려드립니다.

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

호스트 키 선언은 전역 호스트 키를 찾을 위치를 지정합니다. 나중에 호스트 키가 무엇인지 논의할 것입니다.

SyslogFacility AUTH
LogLevel INFO

이 두 항목은 발생해야 하는 로깅 수준을 나타냅니다.

SSH에 어려움이 있는 경우 로깅 양을 늘리는 것이 문제를 발견하는 좋은 방법일 수 있습니다.

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

이 매개변수는 일부 로그인 정보를 지정합니다.

LoginGraceTime은 성공적으로 로그인하지 않고 연결을 유지하는 시간(초)을 지정합니다.

이 시간은 정상적으로 로그인하는 데 걸리는 시간보다 약간 높게 설정하는 것이 좋습니다.

PermitRootLogin은 루트 사용자의 로그인 허용 여부를 선택합니다.

대부분의 경우 상승된 권한에 액세스할 수 있는 사용자 계정을 생성한 경우( su 또는 sudo를 통해) 이를 no로 변경해야 합니다. 누군가 서버에 대한 루트 액세스 권한을 얻는 위험을 최소화하기 위해 ssh를 통해 로그인할 수 있습니다.

strictModes는 모든 사람이 인증 파일을 읽을 수 있는 경우 로그인 시도를 거부하는 안전 장치입니다.

이는 구성 파일이 안전하지 않을 때 로그인 시도를 방지합니다.

X11Forwarding yes
X11DisplayOffset 10

이러한 매개변수는 X11 전달이라는 기능을 구성합니다. 이렇게 하면 로컬 시스템에서 원격 시스템의 그래픽 사용자 인터페이스(GUI)를 볼 수 있습니다.

이 옵션은 -X 옵션으로 연결하는 동안 서버에서 활성화하고 SSH 클라이언트와 함께 제공해야 합니다.

변경한 후 파일을 저장하고 닫습니다. nano를 사용하는 경우 Ctrl+X를 누른 다음 메시지가 표시되면 Y를 누르고 Enter를 누릅니다.

/etc/ssh/sshd_config에서 설정을 변경한 경우 sshd 서버를 다시 로드하여 수정 사항을 구현해야 합니다.

  1. sudo systemctl reload ssh

변경 사항이 예상대로 작동하는지 철저히 테스트해야 합니다.

변경하는 동안 몇 개의 터미널 세션을 열어 두는 것이 좋습니다. 이렇게 하면 필요한 경우 자신을 잠그지 않고 구성을 되돌릴 수 있습니다.

키를 사용하여 SSH에 로그인하는 방법

암호를 사용하여 원격 시스템에 로그인할 수 있으면 도움이 되지만 키 기반 인증을 설정하는 것이 더 빠르고 안전합니다.

키 기반 인증은 어떻게 작동합니까?

키 기반 인증은 개인 키공개 키라는 한 쌍의 키를 생성하여 작동합니다.

개인 키는 클라이언트 시스템에 있으며 보안되고 비밀로 유지됩니다.

공개 키는 누구에게나 제공하거나 액세스하려는 모든 서버에 배치할 수 있습니다.

키 쌍을 사용하여 연결을 시도하면 서버는 공개 키를 사용하여 개인 키로만 읽을 수 있는 클라이언트 컴퓨터에 대한 메시지를 생성합니다.

그런 다음 클라이언트 컴퓨터는 서버에 적절한 응답을 다시 보내고 서버는 클라이언트가 합법적임을 알게 됩니다.

이 프로세스는 키를 구성한 후 자동으로 수행됩니다.

SSH 키를 만드는 방법

에서 로그인하려는 컴퓨터에서 SSH 키를 생성해야 합니다. 이것은 일반적으로 로컬 컴퓨터입니다.

명령줄에 다음을 입력합니다.

  1. ssh-keygen -t rsa

키 파일 자체에 암호를 설정하라는 메시지가 표시될 수 있지만 이는 매우 드문 경우이므로 프롬프트를 통해 Enter 키를 눌러 기본값을 수락해야 합니다. 키는 ~/.ssh/id_rsa.pub~/.ssh/id_rsa에 생성됩니다.

다음을 입력하여 .ssh 디렉토리로 변경합니다.

  1. cd ~/.ssh

파일의 권한을 살펴보십시오.

  1. ls -l
Output
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

보시다시피 id_rsa 파일은 소유자만 읽고 쓸 수 있습니다. 이것은 비밀을 유지하는 데 도움이 됩니다.

그러나 id_rsa.pub 파일은 공유할 수 있으며 이 활동에 적합한 권한이 있습니다.

공개 키를 서버로 전송하는 방법

현재 서버에 대한 암호 기반 액세스 권한이 있는 경우 다음 명령을 실행하여 공개 키를 서버에 복사할 수 있습니다.

  1. ssh-copy-id remote_host

그러면 SSH 세션이 시작됩니다. 비밀번호를 입력하면 공개 키가 서버의 인증된 키 파일에 복사되어 다음에 비밀번호 없이 로그인할 수 있습니다.

클라이언트 측 옵션

SSH를 통해 연결할 때 제공할 수 있는 여러 선택적 플래그가 있습니다.

이 중 일부는 원격 호스트의 sshd 구성 설정과 일치하는 데 필요할 수 있습니다.

예를 들어 sshd 구성에서 포트 번호를 변경한 경우 다음을 입력하여 클라이언트 측에서 해당 포트를 일치시켜야 합니다.

  1. ssh -p port_number remote_host

참고: ssh 포트를 변경하는 것은 무명을 통해 보안을 제공하는 합리적인 방법입니다. 일반적으로 포트 22에서 널리 알려진 서버 배포에 대한 ssh 연결을 허용하고 암호 인증을 활성화한 경우 많은 자동 로그인 시도의 공격을 받을 수 있습니다. 독점적으로 키 기반 인증을 사용하고 비표준 포트에서 ssh를 실행하는 것은 사용할 수 있는 가장 복잡한 보안 솔루션은 아니지만 이를 최소한으로 줄여야 합니다.

원격 시스템에서 단일 명령만 실행하려는 경우 다음과 같이 호스트 뒤에 지정할 수 있습니다.

  1. ssh remote_host command_to_run

원격 시스템에 연결하고 인증하면 명령이 실행됩니다.

이전에 말했듯이 X11 전달이 두 컴퓨터 모두에서 활성화되어 있으면 다음을 입력하여 해당 기능에 액세스할 수 있습니다.

  1. ssh -X remote_host

컴퓨터에 적절한 도구가 있으면 원격 시스템에서 사용하는 GUI 프로그램이 이제 로컬 시스템에서 해당 창을 엽니다.

암호 인증 비활성화

SSH 키를 생성한 경우 비밀번호 전용 인증을 비활성화하여 서버의 보안을 강화할 수 있습니다. 콘솔을 제외하고 서버에 로그인하는 유일한 방법은 서버에 설치한 공개 키와 쌍을 이루는 개인 키를 통하는 것입니다.

경고: 이 단계를 진행하기 전에 서버에 공개 키를 설치했는지 확인하십시오. 그렇지 않으면 잠길 것입니다!

루트 또는 sudo 권한이 있는 사용자로 sshd 구성 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

비밀번호 인증이라는 줄을 찾아 선행 #를 제거하여 주석 처리를 제거합니다. 그런 다음 해당 값을 no로 변경할 수 있습니다.

PasswordAuthentication no

수정할 필요가 없는 두 가지 추가 설정(이전에 이 파일을 수정하지 않은 경우)은 PubkeyAuthenticationChallengeResponseAuthentication입니다. 기본적으로 설정되며 다음과 같이 읽어야 합니다.

PubkeyAuthentication yes
ChallengeResponseAuthentication no

변경한 후 파일을 저장하고 닫습니다.

이제 SSH 데몬을 다시 로드할 수 있습니다.

  1. sudo systemctl reload ssh

이제 비밀번호 인증이 비활성화되고 SSH 키 인증을 통해서만 서버에 액세스할 수 있습니다.

결론

SSH에 대한 방법을 배우면 향후 클라우드 컴퓨팅 노력에 큰 도움이 될 것입니다. 다양한 옵션을 사용하면서 삶을 더 쉽게 만들어 줄 고급 기능을 발견하게 될 것입니다. SSH는 안전하고 가벼우며 다양한 상황에서 유용하기 때문에 인기를 유지하고 있습니다.

다음으로 SFTP를 사용하여 명령줄 파일 전송을 수행하는 방법에 대해 알아볼 수 있습니다.