총 길이 DR
존재하다sshd_config(5), 이 구성 섹션은 다음과 같습니다.
Match Address fe80::/10
PasswordAuthentication yes
...링크-로컬 IPv6 주소가 예상대로 일치하지 않습니다. 이유와 해결 방법은 무엇입니까?
sshd
로컬 주소에서 연결할 때 비밀번호 인증만 허용하도록 구성하려고 합니다 . 그렇지 않으면 공개 키 인증이 필요합니다. 이는 의 관련 구성입니다 sshd_config
.
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# Allow password auth on local network
Match Address 169.254.0.0/16,192.168.0.0/16
PasswordAuthentication yes
Match Address fe80::/10
PasswordAuthentication yes
작동하는 것:
- 예상대로 모든 주소에서 공개 키 인증이 활성화됩니다.
169.254.0.0/16,192.168.0.0/16
예상한 대로 IPv4를 통해 연결할 때 주소 범위에서 비밀번호 인증이 활성화됩니다.
작동하지 않는 것:
fe80::/10
IPv6를 통해 연결하는 경우 주소 범위에서 비밀번호 인증이 활성화되지 않습니다.
관련 라인 var/log/secure
:
sshd[9457]: Connection reset by fe80::39c9:9db5:5a2a:1299%eth0 port 60468 [preauth]
...이 주소는 일치해야 합니다.fe80::/10
내가 완료한 체크리스트 항목:
- IPv6 트래픽은 방화벽에 의해 차단되지 않습니다.
sshd
두 개의 스택에서 듣기
$ netstat -tupln | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8903/sshd
tcp6 0 0 :::22 :::* LISTEN 8903/sshd
Match
IPv4와 IPv6를 결합/분할 하는 명령문은 아무Match Address 169.254.0.0/16,192.168.0.0/16,fe80::/10
작업도 수행하지 않습니다.- IPv6 주소를 대괄호 안에 입력하면
Match Address [fe80::]/10
작동하지 않습니다. sshd
구성 오류를 기록하지 마십시오.var/log/secure
- 클라이언트 문제가 아닙니다. OpenSSH, PuTTY, WinSCP를 시도했지만 동일한 오류가 발생했습니다.
버전:
sshd
CentOS 7에서 실행
$ uname -msr
Linux 5.4.72-v8.1.el7 aarch64
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
/r/sysadmin
디스코드 서버에 이 질문을 올렸는데 사람들의 반응이 "이상하다"였습니다 . 전체 대화 보기여기당신이 관심이 있다면. 내가 시도한 다양한 것들에 대한 좀 더 자세한 내용이 있습니다.
답변1
제가 생각할 수 있는 모든 것을 시도한 끝에 저에게 맞는 솔루션을 찾았습니다. LAN 사용자에게는 비밀번호 인증을 허용하고, LAN 외부에서는 키 기반 인증만 허용하고 싶었는데, 이것이 바로 이 글을 찾게 된 이유입니다.
다른 독서에서 대괄호를 ipv6 주소와 함께 사용해야 한다는 몇 가지 표시를 보았고 sshd 로그에서도 eth0
ipv6을 사용하여 연결할 때 내 연결이 시작되는 인터페이스 이름(예: , ) 을 기록하는 것을 보았습니다. .wlan0
나는 효과가 있는 조합을 찾을 때까지 모든 조합을 테스트하기로 결정했습니다. 형식이 방해되지 않는지 확인하기 위해 /10 없이 전체 ipv6 주소를 입력했으며, 인터페이스 이름을 사용하거나 사용하지 않고, 괄호를 사용하거나 사용하지 않고 시도해 보았습니다(주소의 다른 부분에 괄호를 배치). sshd는 괄호를 좋아하지 않는다고 말해보세요. 내가 포함시킬 때마다 작동하지 않습니다.
전체 정확한 ipv6 주소를 사용하더라도 인터페이스 이름을 지정하지 않으면 작동하지 않으므로 sshd는 ipv6 주소에 URL과 같이 대괄호가 포함되지 않고 인터페이스 이름이 포함될 것으로 예상하는 것처럼 보입니다. 대신에.
마지막 부분은 모든 링크 로컬 주소를 포함하는 /10입니다. 처음에는 올바른 형식을 기대했지만 fe80::/10%eth0
놀랍게도 작동하지 않습니다. 대신, sshd는 당신이 fe80::%eth0/10
. 두 경우 모두 반전이 풀리고 해결책이 생겼습니다.
다음은 ipv4 및 ipv6 로컬 연결이 비밀번호를 사용하여 인증하도록 허용하는 데 사용하는 전체 일치 블록입니다.
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fe80::%eth0/10
PasswordAuthentication yes
원하는 경우 분명히 이름을 컴퓨터의 올바른 인터페이스 이름으로 변경해야 합니다 eth0
(목록을 보거나 ipv6를 통해 연결을 시도할 때 sshd 로그를 확인하여 연결이 사용 중인 인터페이스를 확인할 수 있음). ifconfig
여러 연결 인터페이스의 입력을 지원하려면 ,fe80::%name/10
각 인터페이스에 대해 지정해야 한다고 생각합니다.
이 답변이 이 스레드를 우연히 발견한 다른 사람에게 도움이 되기를 바랍니다. (아마 OP일 수도 있지만, 이것이 5개월 후에 얼마나 도움이 될지는 잘 모르겠습니다.)