23장. 네트워크 보안
23.1. OpenSSH로 두 시스템 간의 보안 통신 사용 링크 복사링크가 클립보드에 복사되었습니다!
SSH(Secure Shell)는 클라이언트-서버 아키텍처를 사용하여 두 시스템 간에 보안 통신을 제공하고 사용자가 서버 호스트 시스템에 원격으로 로그인할 수 있는 프로토콜입니다. FTP 또는 Telnet과 같은 다른 원격 통신 프로토콜과 달리 SSH는 로그인 세션을 암호화하여 침입자가 연결에서 암호화되지 않은 암호를 수집하지 못하도록 합니다.
23.1.1. SSH 키 쌍 생성 링크 복사링크가 클립보드에 복사되었습니다!
로컬 시스템에서 SSH 키 쌍을 생성하고 생성된 공개 키를 OpenSSH 서버에 복사하여 암호를 입력하지 않고 OpenSSH 서버에 로그인할 수 있습니다. 키를 생성하려는 각 사용자는 이 절차를 실행해야 합니다.
시스템을 다시 설치한 후 이전에 생성된 키 쌍을 유지하려면 새 키를 만들기 전에 ~/.ssh/
디렉터리를 백업하십시오. 다시 설치한 후 홈 디렉터리로 복사합니다. root
를 포함하여 시스템의 모든 사용자에 대해 이 작업을 수행할 수 있습니다.
사전 요구 사항
- 키를 사용하여 OpenSSH 서버에 연결하려는 사용자로 로그인했습니다.
- OpenSSH 서버는 키 기반 인증을 허용하도록 구성됩니다.
프로세스
ECDSA 키 쌍을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-keygen
-t ed25519 명령을 입력하여 매개 변수 또는 Ed25519 키 쌍 없이 ssh-keygen
명령을 사용하여 RSA 키 쌍을 생성할 수도 있습니다. Ed25519 알고리즘은 FIPS-140과 호환되지 않으며 OpenSSH는 FIPS 모드에서 Ed25519 키와 함께 작동하지 않습니다.공개 키를 원격 머신에 복사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
;username> @ <ssh-server-example.com
>을 사용자 인증 정보로 바꿉니다.세션에서
ssh-agent
프로그램을 사용하지 않는 경우 이전 명령은 가장 최근에 수정된~/.ssh/id*.pub
공개 키를 아직 설치하지 않은 경우 복사합니다. 다른 공개 키 파일을 지정하거나ssh-agent
로 메모리에 캐시된 키보다 파일의 키 우선 순위를 지정하려면ssh-copy-id
명령을-i
옵션과 함께 사용합니다.
검증
키 파일을 사용하여 OpenSSH 서버에 로그인합니다.
ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
$ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.1.2. OpenSSH 서버에서 유일한 방법으로 키 기반 인증 설정 링크 복사링크가 클립보드에 복사되었습니다!
시스템 보안을 강화하려면 OpenSSH 서버에서 암호 인증을 비활성화하여 키 기반 인증을 시행합니다.
사전 요구 사항
-
openssh-server
패키지가 설치되어 있어야 합니다. -
sshd
데몬이 서버에서 실행되고 있어야 합니다. 키를 사용하여 OpenSSH 서버에 이미 연결할 수 있습니다.
자세한 내용은 SSH 키 쌍 생성 섹션을 참조하십시오.
프로세스
텍스트 편집기에서
/etc/ssh/sshd_config
구성을 엽니다. 예를 들면 다음과 같습니다.vi /etc/ssh/sshd_config
# vi /etc/ssh/sshd_config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PasswordAuthentication
옵션을no
로 변경합니다.PasswordAuthentication no
PasswordAuthentication no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
새 기본 설치 이외의 시스템에서
PubkeyAuthentication
매개변수가 설정되지 않았거나yes
로 설정되어 있는지 확인합니다. ChallengeResponseAuthentication
지시문을no
로 설정합니다.해당 항목은 구성 파일에서 주석 처리되며 기본값은
yes
입니다.NFS로 마운트된 홈 디렉토리에서 키 기반 인증을 사용하려면
use_nfs_home_dirs
SELinux 부울을 활성화합니다.setsebool -P use_nfs_home_dirs 1
# setsebool -P use_nfs_home_dirs 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 콘솔 또는 대역 외 액세스를 사용하지 않고 원격으로 연결하는 경우 암호 인증을 비활성화하기 전에 키 기반 로그인 프로세스를 테스트합니다.
sshd
데몬을 다시 로드하여 변경 사항을 적용합니다.systemctl reload sshd
# systemctl reload sshd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.1.3. ssh-agent를 사용하여 SSH 인증 정보 캐싱 링크 복사링크가 클립보드에 복사되었습니다!
SSH 연결을 시작할 때마다 암호를 입력하지 않으려면 ssh-agent
유틸리티를 사용하여 로그인 세션의 개인 SSH 키를 캐시할 수 있습니다. 에이전트가 실행 중이고 키가 잠금 해제되면 키의 암호를 다시 입력하지 않고도 이러한 키를 사용하여 SSH 서버에 로그인할 수 있습니다. 개인 키와 암호는 안전하게 유지됩니다.
사전 요구 사항
- SSH 데몬이 실행되고 네트워크를 통해 연결할 수 있는 원격 호스트가 있습니다.
- IP 주소 또는 호스트 이름 및 인증 정보를 통해 원격 호스트에 로그인합니다.
암호를 사용하여 SSH 키 쌍을 생성하고 공개 키를 원격 시스템으로 전송했습니다.
자세한 내용은 SSH 키 쌍 생성 섹션을 참조하십시오.
프로세스
세션에서
ssh-agent
를 자동으로 시작하는 명령을~/.bashrc
파일에 추가합니다.선택한 텍스트 편집기에서
~/.bashrc
를 엽니다. 예를 들면 다음과 같습니다.vi ~/.bashrc
$ vi ~/.bashrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 줄을 파일에 추가하세요.
eval $(ssh-agent)
eval $(ssh-agent)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 저장하고 편집기를 종료합니다.
~/.ssh/config
파일에 다음 행을 추가합니다.AddKeysToAgent yes
AddKeysToAgent yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 옵션과
ssh-agent
가 세션에서 시작되면 에이전트는 호스트에 처음 연결할 때만 암호를 입력하라는 메시지를 표시합니다.
검증
에이전트에서 캐시된 개인 키의 해당 공개 키를 사용하는 호스트에 로그인합니다. 예를 들면 다음과 같습니다.
ssh <example.user>@<ssh-server@example.com>
$ ssh <example.user>@<ssh-server@example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 암호를 입력할 필요가 없습니다.
23.1.4. 스마트 카드에 저장된 SSH 키로 인증 링크 복사링크가 클립보드에 복사되었습니다!
스마트 카드에 ECDSA 및 RSA 키를 생성 및 저장하고 OpenSSH 클라이언트의 스마트 카드로 인증할 수 있습니다. 스마트 카드 인증은 기본 암호 인증을 대체합니다.
사전 요구 사항
-
클라이언트 측에서
opensc
패키지가 설치되고pcscd
서비스가 실행 중입니다.
프로세스
PKCS #11 URI를 포함하여 OpenSC PKCS #11 모듈에서 제공하는 모든 키를 나열하고 출력을
keys.pub
파일에 저장합니다.ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공개 키를 원격 서버로 전송합니다. 이전 단계에서 만든
keys.pub
파일과 함께ssh-copy-id
명령을 사용합니다.ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ECDSA 키를 사용하여 < ssh-server-example.com >에 연결합니다. 키를 고유하게 참조하는 URI의 하위 집합만 사용할 수 있습니다. 예를 들면 다음과 같습니다.
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenSSH는
p11-kit-proxy
래퍼를 사용하고 OpenSC PKCS #11 모듈이p11-kit
툴에 등록되므로 이전 명령을 단순화할 수 있습니다.ssh -i "pkcs11:id=%01" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PKCS #11 URI의
id=
부분을 건너뛰면 OpenSSH는 proxy 모듈에서 사용할 수 있는 모든 키를 로드합니다. 이렇게 하면 필요한 입력 횟수가 줄어듭니다.ssh -i pkcs11: <ssh-server-example.com>
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
~/.ssh/config
파일에서 동일한 URI 문자열을 사용하여 구성을 영구적으로 만들 수 있습니다.cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제
ssh
클라이언트 유틸리티에서 이 URI와 스마트 카드의 키를 자동으로 사용합니다.