다음과 같은 설정이 있습니다.
- Centos 6의 클라이언트 openssh 5.3
- centos 7의 nginxplus 스트리밍 프록시(gitlab 서버 포트 22에 대한 프록시 사용자 정의 SSH 포트)
- openssh 7.4를 실행하는 gitlab 서버
클라이언트에서 SSH를 통해 서버에 연결할 수 없습니다. 다른 곳에서 SSH 서버에 연결할 수 있습니다. 사용자 정의 TCP 포트에 연결할 수 있으며 ssh 클라이언트 명령을 실행하면 해당 포트에 TCP 연결이 표시됩니다. 그러나 클라이언트가 데이터를 제공하지 않기 때문에 데이터가 gitlab 서버로 프록시되지 않습니다.
또한 클라이언트 노드 IP에서 연결할 수 있도록 클라이언트 호스트와 SSH 세션을 시작하고 포트를 프록시/gitlab 서버로 전달하려고 시도했지만 최신 클라이언트를 사용했습니다. 이것은 작동하므로 방화벽이나 호스트 거부와 같은 문제는 아니라고 생각합니다. 클라이언트 노드에서 SSH 호스트 키를 업데이트했지만 이 역시 효과가 없었습니다.
연결할 때 tcpdump에서 SSH 프로토콜 협상이 시작되지 않는 것을 볼 수 있습니다. 이것이 클라이언트 버전과 관련이 있거나 구성 설정이 누락된 것일 수 있다고 생각하지만 무엇인지는 모르겠습니다.
[root@clienthost ~]# ssh -i ~/.ssh/id_rsa [email protected] -p $CUSTOMPORT -vv
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /root/.ssh/config
debug1: Applying options for gitlab.test.fqdn
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to gitlab.test.fqdn [a.b.c.d] port $CUSTOMPORT.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
내가 아는 한 이것은 대부분 이전 rsa 1 프로토콜과 관련이 있으며 rsa 2에는 중요하지 않습니다. id_rsa 파일의 권한은 0400
그런데 루트를 제외한 다른 사용자에게도 적용되지 않습니다.
SSH 클라이언트 구성:
Host gitlab.test.fqdn
HostName gitlab.test.fqdn
User git
IdentityFile /root/.ssh/id_rsa
Port $CUSTOMPORT
id_rsa 파일 속성의 주석 후 편집
또한 id_rsa를 ASCII 텍스트 파일로 보고하는 파일 명령 관련 문제가 해결되었습니다. 이제 pem rsa 개인 키 파일을 보고합니다.
내가 놓치고 있는 부분이나 내가 잘못하고 있는 부분에 대해 아는 사람이 있나요?
답변1
nc -v gitlab.test.fqdn $CUSTOMPORT
또는를 실행하고 telnet gitlab.test.fqdn $CUSTOMPORT
에이전트가 SSH와 직접 호환되는 방식으로 작동하는 경우 이제 SSH 서버 버전 문자열을 가져와야 합니다.
문자열은 다음과 같아야 합니다.
SSH-2.0-<something...>
HTTP 프로토콜을 예상하도록 프록시가 실수로 잘못 구성된 경우 연결은 성공하지만 초기 응답은 없습니다. HTTP에서는 클라이언트가 먼저 말해야 하지만 SSH 프로토콜에서는 서버가 먼저 말해야 합니다.
(HTTP 프록시를 지원하는 클라이언트할 수 있다그런 다음 HTTP CONNECT
요청을 사용하여 지정된 대상에 대해 지정된 포트에 연결합니다. 그러나 이렇게 하면 클라이언트가 프록시 연결의 대상을 선택할 수 있지만 이는 분명히 원하는 것이 아닙니다. )
답변2
우리는 nginx에서 ssl_preread를 활성화했는데, 이는 분명히 서버 우선 프로토콜과 버전 발표를 차단합니다. 이 기능을 끄면 서버가 프로토콜과 버전을 먼저 보내고 모든 것이 예상대로 작동합니다.
telcoM의 답변이 많은 도움이 되었어요. 감사합니다! 하지만 해결책으로 특정 구성 변경 사항을 게시하고 싶습니다.