Linux SSH 신뢰 방법을 설정하는 방법 및 자주 묻는 질문(FAQ)
Linux 서버 간의 신뢰 관계 설정은 많은 온라인 서비스 시스템의 기본 작업입니다. 이를 통해 프로그램은 여러 서버 간에 자동으로 데이터를 전송하거나 사용자가 비밀번호를 입력하지 않고도 로그인할 수 있습니다. 서로 다른 호스트 간의 다양한 작업.
인터넷에 Linux 신뢰 관계(ssh 신뢰)를 구축하는 방법에 대한 중국어 기사가 있지만 그다지 상세하지는 않습니다. 다음은 정보의 모든 측면을 요약하고 구축 방법에 대한 명확한 설명입니다. 다중 기계 신뢰 관계 (텍스트 / Chen Yunwen)
신뢰 관계를 구축하기 위한 기본 작업
기본 시나리오는 한 서버에서 다른 서버로 직접 로그인하거나 직접 전송하는 것입니다. 비밀번호 확인 없이 Server의 데이터를 Client 서버로 복사합니다. 이하에서는 Server 서버를 S(전송할 데이터 파일이 이 서버에 있음), Client 서비스를 C라고 합니다. 가장 간단한 조작 방법 신뢰 관계는 다음과 같습니다:
1 S 서버에서 현재 사용자의 루트 디렉터리에 숨겨진 디렉터리 .ssh를 입력하고 명령은 다음과 같습니다.
cd ~/ .ssh
(참고: 디렉터리 이름 앞의 점 "."은 파일을 나타냅니다. 폴더는 특수 숨겨진 폴더로 ls 명령에서 기본적으로 볼 수 없습니다. ls를 통해 관찰할 수 있습니다. –a 명령)
2 S 서버의 개인 키와 공개 키를 생성합니다:
ssh-keygen -t rsa
(참고: rsa는 암호화 알고리즘의 이름인 dsa도 여기에서 사용할 수 있습니다. rsa 및 dsa 알고리즘에 대한 소개는 이 기사의 후반부에서 찾을 수 있습니다.)
ssh-keygen은 신뢰 관계 생성을 위한 키를 생성합니다
- 이때 공개키/개인키 쌍 생성이 표시되며, 생성된 공개키 파일과 개인키 파일의 저장 경로 및 파일명이 묻는 메시지가 기본적으로 / 등의 파일에 배치됩니다. home/username/.ssh/id_rsa. 일반적으로 변경할 필요가 없습니다. Enter를 누르기만 하면 됩니다.
그런 다음 암호를 입력하세요(암호가 없는 경우 비어 있음): 일반적으로 Enter를 직접 누르세요. 기본값은 암호가 필요하지 않습니다
동일한 암호를 다시 입력하세요. Enter를 누르세요.
그러면 생성된 키 지문을 보여주는 프롬프트가 표시되고 RSA 암호화 프로토콜의 상자 그래픽이 제공됩니다. 이때 .ssh 디렉터리에 ls가 생성되면 생성된 개인키 파일 id_rsa와 공개키 파일 id_rsa.pub를 확인할 수 있습니다.
다음은 각종 보충 지침입니다.
참고 1 : id_rsa가 이미 존재한다는 메시지가 나타나면 덮어쓰기(y/n)는 이미 누군가가 키를 생성했음을 의미합니다. 이때 이 작업을 무시하려면 n을 선택합니다. 물론 이전에 생성된 파일을 직접 사용할 수도 있습니다. 덮어쓰는 것은 중요하지 않습니다.
참고 2: 공개 키는 암호화에 사용되며 모든 사람에게 공개됩니다(pub은 공개라는 단어의 약어입니다). 개인 키는 해독에 사용됩니다. 암호문의 수신자만이 보유합니다.
3 서버 서버에 개인 키 파일을 로드합니다.
여전히 .ssh 디렉터리에서 다음 명령을 실행합니다:
ssh-add id_rsa
시스템에 다음 메시지가 표시되면 ID 추가됨: id_rsa(id_rsa)는 로드가 성공한 것입니다.
처리해야 할 몇 가지 예외가 있습니다.
–시스템에 메시지가 표시되는 경우: 그럴 수 있습니다. 인증 에이전트에 대한 연결을 열지 마십시오.
다음 명령을 실행해야 합니다:
ssh-agent bash
그런 다음 위의 ssh-add id_rsa 명령을 실행하십시오.
–시스템에서 id_rsa: 해당 파일 또는 디렉터리가 없다는 메시지가 표시되는 경우
이는 시스템이 개인 키 파일 id_rsa를 찾을 수 없음을 의미합니다. .ssh 디렉터리 또는 개인 키 파일의 이름이 변경되었습니다. 예를 들어 생성 시 aa_rsa로 변경된 경우 여기에 있는 명령도 그에 따라 변경되어야 합니다.
-시스템에서 명령을 찾을 수 없다는 메시지가 표시되는 경우, 명령에 잘못된 문자를 입력한 것 같습니다J
-프롬프트 에이전트가 키를 사용한 서명 실패를 인정했으며 개인 키가 성공적으로 로드되지 않았습니다. ssh-add를 다시 시도하십시오.
-id_rsa/id_rsa.pub 파일은 삭제하지 말고 .ssh 디렉터리에 저장하면 안 됩니다.
4 공개 키를 클라이언트 서버에 복사하세요.
매우 간단합니다. example scp id_rsa.pub user@10.11.xx.xx:~
5 ssh를 통해 클라이언트 서버에 로그인한 다음 클라이언트 서버에서 공개 키 내용을 authorized_keys 파일(이 파일은 숨겨진 폴더 .ssh에도 있습니다. 그렇지 않은 경우 생성해도 상관없습니다.)
cat id_rsa.pub gt; ~/.ssh/authorized_keys
다음은 문제가 발생할 때 참조할 수 있는 다양한 보충 지침입니다.
참고 1: 여기서는 파일 덮어쓰기를 권장하지 않습니다. scp id_rsa.pub를authorized_keys에 직접 연결하세요. 클라이언트 서버의 파일을 삭제하면 이전에 설정된 다른 신뢰 관계의 데이터가 파기됩니다. 끝에 추가하는 것이 더 안전한 방법입니다.
참고 2: cat이 완료된 후 클라이언트 서버는 id_rsa.pub 방금 복사한 파일은 더 이상 필요하지 않으며 삭제하거나 다른 위치로 이동할 수 있습니다.)
참고 3: ssh-keygen 명령은 그렇지 않은 경우 -b 매개변수를 통해 생성된 키 파일의 길이를 지정할 수 있습니다. 지정하면 기본값은 1024이다. ssh-keygen –b 4096(최대 4096)인 경우 암호화 정도는 높아지지만 생성 및 검증 시간이 늘어난다. 일반 애플리케이션의 경우 기본 길이이면 충분합니다. rsa 암호화 방식인 경우 최소 길이는 768바이트입니다.
참고 4:authorized_keys 파일에 권한 문제가 있습니다. 위 단계에 따라 관계를 설정한 후에도 여전히 비밀번호를 확인해야 하고 다른 오류가 보고되지 않는 경우,authorized_keys 파일의 권한을 확인하고 다음과 같이 수정해야 합니다: chmod g-wauthorized_keys
좋아요, 이제 서버 측에서 시도해 보세요. 파일을 클라이언트 서버에 복사하면 상호 작용 없이 직접 전송되어야 합니다.
단, 이때에도 클라이언트에서 서버로 데이터를 전송할 때 비밀번호 확인이 필요합니다.
두 서버 간에 직접 데이터를 전송해야 하는 경우 위의 단계를 역순으로 진행하면 됩니다.
서버 간 신뢰관계를 삭제하는 두 번째 방법
두 서버를 취소하고 싶은 경우 서버간에는 신뢰 관계가 있으므로 공개키나 개인키를 직접 삭제하는 것은 소용이 없습니다. 클라이언트 서버에서 ~/.ssh/authorized_keys 파일을 열어서 해당 서버의 공개키 필드를 찾아 삭제해야 합니다.
각 문단의 시작은 ssh-rsa라는 단어이고, 문단의 끝은 서버 계정과 IP입니다(아래 그림의 빨간색 상자). 잘 검색한 후 전체를 삭제해야 합니다. 단락
주요 파일 내용 및 삭제 Linux 서버 간 신뢰 관계의 방법
가능한 세 가지 상황 및 처리 방법
–프롬프트 포트 22: 연결이 거부됨
가능한 이유: 최신 openssh-server가 올바르게 설치되지 않았습니다. 설치 방법은 다음과 같습니다.
sudo apt-get install openssh-server
apt 설치가 되지 않은 경우. 지원되는 경우 수동으로 다운로드할 수 있습니다.
wget ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz
–디렉터리 및 파일 권한 설정 정보
.ssh 디렉터리의 권한은 700이어야 하고 로컬 개인 키의 권한은 600으로 설정되어야 합니다.
chmod 600 id_rsa
그렇지 않으면 SSH 서버는 로그인을 거부합니다
RSA 및 DSA 암호화 알고리즘에 대한 네 가지
ssh-keygen 명령에서 암호화 알고리즘은 -t 매개변수 뒤에 지정됩니다. rsa를 선택할 수 있습니다. 또는 dsa
RSA는 알고리즘 제안자 세 명인 Ron Rivest, Adi Shamir 및 Leonard Adleman의 이니셜을 따서 명명되었습니다. RSA의 보안은 매우 어려운 큰 정수 인수분해를 기반으로 합니다. (두 소수의 곱의 환원 문제). RSA 알고리즘의 원리에 관한 많은 기사가 있습니다. 관심 있는 친구들이 읽어볼 수 있습니다.
DSA = 유한장 이산 로그 문제를 기반으로 하는 디지털 서명 알고리즘은 Schnorr 및 ElGamal 서명 알고리즘의 변형으로 일반적으로 디지털 서명 및 인증에 사용되며 디지털 방식으로 채택되었습니다. NIST(National Bureau of Standards)의 서명 표준입니다. 이산 로그 계산을 기반으로 합니다.
DES = 디지털 암호화 표준.
좋은 것입니다. RSA 알고리즘의 장점은 네트워크에서 키 관리 구현이 용이하여 디지털 암호화에 사용할 수 있다는 점이며, 알고리즘이 복잡하고 추가/복호 속도가 느리며 비대칭 암호화를 사용한다는 점입니다. 실제로 신뢰 관계를 구축하기 위해 사용하는 경우 이 두 가지 방법의 차이는 매우 작으며 둘 중 하나를 선택하여 사용할 수 있습니다.
5 SSH 프로토콜 소개
SSH의 전체 이름은 이름에서 알 수 있듯이 매우 안전한 쉘을 의미합니다. SSH 프로토콜은 Network Working에서 개발되었습니다. IETF(Internet Engineering Task Force) 그룹의 협약입니다. SSH의 주요 목적은 원격 로그인 및 원격 명령 실행을 위한 도구로서 기존 텔넷 및 R 시리즈 명령(rlogin, rsh, rexec 등)을 대체하고, 원격 로그인 및 원격 명령 실행의 암호화를 구현하는 것입니다. 네트워크 모니터링으로 인한 비밀번호 유출로 인해 시스템에 위협이 되는 것을 방지합니다.
SSH 프로토콜에는 현재 SSH1과 SSH2가 포함되어 있으며 SSH2 프로토콜은 SSH1과 호환됩니다. 현재 SSH1 및 SSH2 프로토콜을 구현하는 주요 소프트웨어는 OpenSSH와 SSH Communications Security Corporation의 SSH Communications 소프트웨어입니다. 전자는 OpenBSD 조직에서 개발한 무료 SSH 소프트웨어이고 후자는 상용 소프트웨어입니다. 따라서 OpenSSH는 Linux, FreeBSD, OpenBSD, NetBSD와 같은 무료 UNIX 계열 시스템에서 SSH 프로토콜의 구현 소프트웨어로 사용됩니다. 따라서 이 기사에서는 OpenSSH 사용에 중점을 둡니다. OpenSSH와 SSH 통신의 로그인 공개/개인 키 형식이 다르다는 점에 유의해야 합니다. OpenSSH를 사용하여 Linux 시스템에 로그인하기 위해 SSH 통신에서 생성된 개인/공개 키 쌍을 사용하려면 다음을 수행해야 합니다. 공개/개인 키 형식 변환을 수정합니다.
Ssh는 처음 로그인한 후 원격 시스템이 재설치된 경우 로그인한 SSH 지문을 사용자 홈 디렉토리의 .ssh 디렉토리에 있는 Know_hosts 파일에 저장합니다. 변경된 경우 .ssh 디렉터리의 Know_hosts에서 해당 지문을 삭제한 다음 로그인하고 로그인하기 전에 '예'라고 대답해야 합니다. .ssh 디렉토리는 "."으로 시작하는 숨겨진 디렉토리이며 이를 보려면 ls –a 매개변수가 필요합니다. 또한 이 디렉터리의 권한은 700이어야 하며 사용자의 홈 디렉터리는 다른 사용자에게 쓰기 권한을 부여할 수 없습니다. 그렇지 않으면 SSH 서버가 로그인을 거부합니다. 로그인이 되지 않는 경우, 서버의 /var/log/secure 로그 파일을 확인하시기 바랍니다. 로그인이 안되는 이유는 대개 금방 찾을 수 있습니다.
ssh_config 및 sshd_config 파일 구성에 대한 6가지 지침
/etc/ssh/ssh_config:
Host *
옵션 "Host"만 해당 다음 문자열과 일치할 수 있는 컴퓨터에 유효합니다. "*"는 모든 컴퓨터를 나타냅니다.
ForwardAgent no
"ForwardAgent"는 인증 에이전트(존재하는 경우)를 통해 연결이 원격 컴퓨터로 전달되는지 여부를 설정합니다.
ForwardX11 no
"ForwardX11"은 X11 연결이 자동으로 보안 채널 및 디스플레이 세트(DISPLAY 세트)로 리디렉션되는지 여부를 설정합니다.
RhostsAuthentication no
"RhostsAuthentication"은 rhosts 기반 보안 인증을 사용할지 여부를 설정합니다.
RhostsRSAAuthentication no
"RhostsRSAAuthentication"은 RSA 알고리즘을 사용하여 rhosts 기반 보안 인증을 사용할지 여부를 설정합니다.
RSAAuthentication yes
"RSAAuthentication"은 보안 확인을 위해 RSA 알고리즘을 사용할지 여부를 설정합니다.
PasswordAuthentication yes
"PasswordAuthentication"은 비밀번호 인증 사용 여부를 설정합니다.
FallBackToRsh no
"FallBackToRsh"는 SSH를 통해 연결 시 오류가 발생할 경우 자동으로 rsh를 사용할지 여부를 설정합니다.
UseRsh no
"UseRsh"는 이 컴퓨터에서 "rlogin/rsh"를 사용할지 여부를 설정합니다.
BatchMode no
"BatchMode"가 "yes"로 설정된 경우 암호/암호(대화형 암호 입력) 프롬프트가 비활성화됩니다. 이 옵션은 대화형 암호 입력이 불가능한 스크립트 파일 및 배치 작업에 유용합니다.
CheckHostIP yes
"CheckHostIP"는 DNS 스푸핑을 방지하기 위해 SSH가 서버에 연결된 호스트의 IP 주소를 확인할지 여부를 설정합니다. "예"로 설정하는 것이 좋습니다.
StrictHostKeyChecking no
"StrictHostKeyChecking"이 "yes"로 설정된 경우 ssh는 컴퓨터의 키를 "$HOME/.ssh/known_hosts" 파일에 자동으로 추가하지 않습니다. 컴퓨터의 키가 변경된 경우 연결이 거부됩니다.
IdentityFile ~/.ssh/identity
"IdentityFile"은 사용자의 RSA 보안 확인 ID를 읽을 파일을 설정합니다.
포트 22
"포트"는 원격 호스트에 연결할 포트를 설정합니다.
Cipher 복어
"Cipher"는 암호화를 위한 비밀번호를 설정합니다.
EscapeChar ~
"EscapeChar"는 이스케이프 문자를 설정합니다.
/etc/ssh/sshd_config:
포트 22
"Port"는 SSH 수신을 위한 포트 번호를 설정합니다.
ListenAddress 192.168.1.1
"ListenAddress"는 SSHD 서버에 바인딩된 IP 주소를 설정합니다.
HostKey /etc/ssh/ssh_host_key
"HostKey" 설정에는 컴퓨터의 개인 키가 포함된 파일이 포함되어 있습니다.
ServerKeyBits 1024
"ServerKeyBits"는 서버 키의 비트 수를 정의합니다.
LoginGraceTime 600
"LoginGraceTime"은 사용자가 성공적으로 로그인할 수 없는 경우 연결을 끊기 전에 서버가 기다려야 하는 시간(초)을 설정합니다.
KeyRe GenerationInterval 3600
"KeyRe GenerationInterval"은 서버의 키가 자동으로 재생성되는 시간(초)을 설정합니다(키가 사용되는 경우). 키 재입력은 가로채는 메시지가 도난당한 키로 해독되는 것을 방지하는 데 사용됩니다.
PermitRootLogin no
"PermitRootLogin"은 루트가 SSH를 사용하여 로그인할 수 있는지 여부를 설정합니다. 이 옵션을 "yes"로 설정하면 안 됩니다.
IgnoreRhosts yes
"IgnoreRhosts"는 확인 중에 "rhosts" 및 "shosts" 파일을 사용할지 여부를 설정합니다.
IgnoreUserKnownHosts yes
"IgnoreUserKnownHosts"는 RhostsRSAAuthentication 보안 확인을 수행할 때 ssh 데몬이 사용자의 "$HOME/.ssh/known_hosts"를 무시할지 여부를 설정합니다.
StrictModes yes
"StrictModes"는 ssh가 로그인 요청을 받기 전에 사용자 홈 디렉토리와 rhosts 파일의 권한과 소유권을 확인할지 여부를 설정합니다.
초보자는 모든 사람이 쓰기 액세스 권한을 갖도록 디렉터리와 파일을 설정하는 경우가 많기 때문에 이는 종종 필요합니다.
X11Forwarding no
"X11Forwarding"은 X11 전달 허용 여부를 설정합니다.
PrintMotd yes
"PrintMotd"는 사용자가 로그인할 때 sshd가 "/etc/motd"에 정보를 표시할지 여부를 설정합니다.
SyslogFacility AUTH
"SyslogFacility"는 sshd에서 메시지를 기록할 때 "시설 코드"를 제공할지 여부를 설정합니다.
LogLevel INFO
"LogLevel"은 sshd 로그 메시지가 기록되는 수준을 설정합니다. INFO는 좋은 선택입니다. 자세한 내용은 sshd 매뉴얼 페이지를 확인하세요.
RhostsAuthentication no
보안 확인을 위해 "RhostsAuthentication" 설정이 rhosts 또는 "/etc/hosts.equiv"만 사용하기에 충분합니까?
RhostsRSAAuthentication no
"RhostsRSA"는 rhosts 또는 "/etc/hosts.equiv"와 RSA를 사용하여 보안 확인을 허용할지 여부를 설정합니다.
RSAAuthentication 예
"RSAAuthentication" 설정은 RSA 보안 확인만 허용합니다.
PasswordAuthentication yes
"PasswordAuthentication"은 비밀번호 확인 허용 여부를 설정합니다.
PermitEmptyPasswords no
"PermitEmptyPasswords"는 비밀번호가 비어 있는 계정으로 로그인을 허용할지 여부를 설정합니다.
AllowUsers admin
"AllowUsers" 뒤에는 사용자 이름과 일치하는 문자열(패턴) 또는 user@host와 같은 문자열이 올 수 있습니다. 이러한 문자열은 공백으로 구분됩니다. . 호스트 이름은 DNS 이름이거나 IP 주소일 수 있습니다.