소개
시스템 관리자로서 꼭 숙달해야 할 중요한 도구 중 하나는 SSH입니다.
SSH 또는 보안 셸은 원격 시스템에 안전하게 로그인하는 데 사용되는 프로토콜입니다. 이는 원격 Linux 서버에 접속하는 가장 일반적인 방법입니다.
이 가이드에서는 원격 시스템에 연결하는 데 SSH를 사용하는 방법에 대해 논의하겠습니다.
DigitalOcean 앱 플랫폼을 사용하여 GitHub에서 프론트엔드 응용 프로그램을 배포하세요. DigitalOcean이 앱을 확장하는 데 집중할 수 있도록 하세요.
핵심 구문
SSH를 사용하여 원격 시스템에 연결하려면 ssh
명령을 사용합니다.
Windows를 사용하는 경우 터미널에서 ssh
를 사용하려면 OpenSSH 버전을 설치해야합니다. PowerShell에서 작업하는 것을 선호하는 경우 Microsoft의 문서에 따라 PowerShell에 OpenSSH를 추가할 수 있습니다. 전체 Linux 환경을 사용하고 싶은 경우 WSL을 설정할 수 있습니다. Windows Subsystem for Linux으로, 기본적으로 ssh
가 포함됩니다. 마지막으로 가벼운 세 번째 옵션으로 Git for Windows를 설치할 수 있습니다. 이는 ssh
명령이 포함된 네이티브 Windows bash 터미널 환경을 제공합니다. 이러한 각 옵션은 잘 지원되며 사용하려는 옵션은 개인적인 선호도에 따라 결정됩니다.
Mac이나 Linux를 사용하는 경우 터미널에서 이미 ssh
명령을 사용할 수 있습니다.
명령의 가장 직접적인 형태는 다음과 같습니다:
이 예에서 remote_host
는 연결하려는 IP 주소 또는 도메인 이름입니다.
이 명령은 원격 시스템의 사용자 이름이 로컬 시스템의 사용자 이름과 동일하다고 가정합니다.
원격 시스템의 사용자 이름이 다른 경우 다음 구문을 사용하여 지정할 수 있습니다:
서버에 연결한 후에는 비밀번호 대신에 사용할 키를 생성하는 방법에 대해 다룰 것입니다.
SSH 세션을 종료하고 로컬 셸 세션으로 돌아가려면 다음을 입력하십시오:
SSH가 어떻게 작동합니까?
SSH는 클라이언트 프로그램을 sshd
라고 불리는 SSH 서버에 연결하여 작동합니다.
이전 섹션에서 ssh
가 클라이언트 프로그램이었습니다. remote_host
에 지정한 SSH 서버가 이미 실행 중이었습니다.
거의 모든 Linux 환경에서 sshd
서버는 자동으로 시작해야 합니다. 어떤 이유로든 실행되지 않는 경우 웹 기반 콘솔 또는 로컬 시리얼 콘솔을 통해 일시적으로 서버에 액세스해야 할 수 있습니다.
SSH 서버를 시작하는 데 필요한 프로세스는 사용 중인 Linux 배포에 따라 다릅니다.
Ubuntu에서는 다음을 입력하여 SSH 서버를 시작할 수 있습니다:
그러면 sshd 서버가 시작되어 원격으로 로그인할 수 있게 됩니다.
SSH 구성 방법
SSH 구성을 변경하면 sshd 서버의 설정을 변경하는 것입니다.
Ubuntu에서는 주요 sshd 구성 파일이 /etc/ssh/sshd_config
에 있습니다.
편집하기 전에 이 파일의 현재 버전을 백업하십시오:
nano
또는 즐겨 사용하는 텍스트 편집기를 사용하여 여세요:
대부분의 옵션은 그대로 두는 것이 좋습니다. 그러나 몇 가지를 살펴볼 필요가 있습니다:
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
은 root 사용자가 로그인할 수 있는지 여부를 선택합니다.
대부분의 경우, 관리자 권한에 액세스할 수 있는 사용자 계정을 만들고 해당 사용자로 ssh를 통해 로그인할 수 있도록 한 경우, 누군가가 서버의 root 액세스를 얻는 위험을 최소화하기 위해 이를 no
로 변경해야 합니다.
strictModes
는 인증 파일이 모든 사용자에게 읽기 가능하면 로그인 시도를 거부할 안전 장치입니다.
이는 구성 파일이 안전하지 않을 때 로그인 시도를 방지합니다.
X11Forwarding yes
X11DisplayOffset 10
이러한 매개변수는 X11 전달이라는 기능을 구성합니다. 이를 통해 원격 시스템의 그래픽 사용자 인터페이스(GUI)를 로컬 시스템에서 볼 수 있습니다.
이 옵션은 서버에서 활성화되어야 하며 SSH 클라이언트가 연결할 때 -X
옵션과 함께 제공되어야 합니다.
변경 사항을 저장하고 파일을 닫은 후에는 nano
를 사용하는 경우 Ctrl+X
를 누르고 프롬프트가 나오면 Y
를 입력하고 Enter를 누르십시오.
/etc/ssh/sshd_config
에서 설정을 변경한 경우 수정 사항을 적용하려면 sshd 서버를 다시로드해야 합니다:
원하는대로 작동하는지 확인하기 위해 변경 사항을 철저히 테스트해야 합니다.
변경 사항을 만들 때 몇 가지 터미널 세션을 열어두는 것이 좋습니다. 이렇게 하면 필요한 경우 구성을 되돌릴 수 있으며 잠금이 발생하지 않습니다.
키를 사용하여 SSH에 로그인하는 방법
원격 시스템에 암호를 사용하여 로그인하는 것은 도움이 되지만, 키 기반 인증을 설정하는 것이 더 빠르고 안전합니다.
키 기반 인증은 어떻게 작동하나요?
키 기반 인증은 두 개의 키를 생성함으로써 작동합니다: 개인 키와 공개 키입니다.
개인 키는 클라이언트 장치에 위치하고 안전하게 보호되며 비밀로 유지됩니다.
공개 키는 누구에게든지 제공하거나 액세스하려는 모든 서버에 배치할 수 있습니다.
키 쌍을 사용하여 연결을 시도할 때, 서버는 클라이언트 컴퓨터를 위해 공개 키를 사용하여 메시지를 생성하고 이를 개인 키로만 읽을 수 있도록 합니다.
그런 다음 클라이언트 컴퓨터는 적절한 응답을 서버로 다시 보내고 서버는 클라이언트가 정당한지를 알게 됩니다.
이 프로세스는 키를 구성한 후에 자동으로 수행됩니다.
SSH 키 생성 방법
SSH 키는 로그인하려는 컴퓨터에서 생성되어야 합니다. 보통 이는 로컬 머신입니다.에서
다음을 명령 줄에 입력하십시오:
키 파일 자체에 비밀번호를 설정하도록 요구될 수 있지만, 이는 꽤 일반적인 관행이 아닙니다. 기본값을 수락하려면 프롬프트를 통해 Enter 키를 누르십시오. 키는 ~/.ssh/id_rsa.pub 및 ~/.ssh/id_rsa에 생성됩니다.
다음을 입력하여 .ssh
디렉토리로 이동하십시오:
파일의 권한을 확인하십시오:
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
파일은 공유될 수 있으며 이 활동에 적합한 권한이 부여되어 있습니다.
서버로 공개 키 전송하는 방법
현재 서버에 비밀번호 기반 액세스가 있는 경우 다음 명령을 사용하여 공개 키를 복사할 수 있습니다:
이 명령을 실행하면 SSH 세션이 시작됩니다. 비밀번호를 입력한 후, 공개 키가 서버의 허가된 키 파일에 복사되어 다음에는 비밀번호 없이 로그인할 수 있게 됩니다.
클라이언트 측 옵션
SSH를 통해 연결할 때 제공할 수 있는 여러 선택적 플래그가 있습니다.
일부는 원격 호스트의 sshd
구성과 일치시키기 위해 필요할 수 있습니다.
예를 들어, sshd
구성에서 포트 번호를 변경한 경우 클라이언트 측에서 해당 포트를 일치시켜야 합니다. 다음과 같이 입력하면 됩니다:
참고: SSH 포트를 변경하는 것은 보안을 위해 난독화를 제공하는 합리적인 방법입니다. 일반적으로 포트 22에서 널리 알려진 서버 배포에 SSH 연결을 허용하고 암호 인증을 사용하는 경우, 많은 자동 로그인 시도로 공격당할 가능성이 높습니다. 키 기반 인증만 사용하고 SSH를 표준 포트가 아닌 다른 포트에서 실행하는 것은 가장 복잡한 보안 솔루션은 아니지만 이러한 공격을 최소화시킬 수 있습니다.
원격 시스템에서 단일 명령을 실행하려는 경우 호스트 뒤에 명령을 지정할 수 있습니다. 다음과 같이 입력하면 됩니다:
원격 머신에 연결하고 인증하면 명령이 실행됩니다.
앞서 말한대로 두 컴퓨터 모두에서 X11 포워딩이 활성화된 경우 다음과 같이 입력하여 해당 기능에 액세스할 수 있습니다:
컴퓨터에 적절한 도구가 설치되어 있으면 원격 시스템에서 사용하는 GUI 프로그램이 로컬 시스템에 창을 열게 됩니다.
암호 인증 비활성화
SSH 키를 생성했다면, 암호 기반 인증을 비활성화하여 서버의 보안을 강화할 수 있습니다. 콘솔 이외에는 서버에 로그인하는 유일한 방법은 서버에 설치된 공개 키와 쌍을 이루는 개인 키를 통해서만 가능합니다.
경고: 이 단계를 진행하기 전에 서버에 공개 키를 설치했는지 확인하세요. 그렇지 않으면 잠길 수 있습니다!
루트 또는 sudo 권한이 있는 사용자로서 sshd
구성 파일을 엽니다:
Password Authentication
이라는 줄을 찾아서 선행하는 #
을 제거하여 주석 처리를 취소하세요. 그런 다음 그 값을 no
로 변경하세요:
PasswordAuthentication no
변경할 필요가 없어야 할 두 가지 설정(이 파일을 이전에 수정하지 않았다면)은 PubkeyAuthentication
및 ChallengeResponseAuthentication
입니다. 기본적으로 설정되어 있어야 하며 다음과 같이 표시되어야 합니다:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
변경 사항을 저장하고 파일을 닫은 후에는 SSH 데몬을 다시로드할 수 있습니다:
이제 암호 인증이 비활성화되고, 서버에는 SSH 키 인증만 통해서만 접근할 수 있어야 합니다.
결론
SSH에 대해 학습하는 것은 향후 클라우드 컴퓨팅 노력에 크게 도움이 될 것입니다. 다양한 옵션을 사용하면 더 많은 고급 기능을 발견할 수 있으며 이는 여러분의 삶을 더욱 쉽게 만들 수 있습니다. SSH는 안전하고 가벼우며 다양한 상황에서 유용하기 때문에 인기가 지속됩니다.
다음으로, 명령 줄 파일 전송을 수행하기 위해 SFTP 작업에 대해 학습하고 싶을 수 있습니다.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server