CommonName을 호스트 이름으로 사용하여 원격 openvpn 네트워크의 호스트로 이동 것을 달성하기 위해 다음을 수행했습니다. ~user/.ssh/config: Host *

server공용 IP와 연결된 NAT를 뒤에서 여러 클라이언트와 server경유 openvpnifconfig-pool-persist ipp.txt의 옵션 /etc/openvpn/server.conf.

openvpn네트워크 ( 172.16.0.0/16) 의 모든 참가자 에게는 sudo-user가 user있습니다. 내 로컬 컴퓨터의 공개 키에 추가 ~root/.ssh/authorized_keys하고 ~user/.ssh/authorized_keysserver모든 클라이언트. 따라서 네트워크 server로의 점프 호스트로 172.16.0.0/16사용하면 키 전달을 통해 IP를 통해 네트워크의 모든 참가자에게 쉽게 연결할 수 있습니다 ( ForwardAgent yes).

openvpn클라이언트에 대한 인증서 / 키 페어 발급하기 의미있는 이름 ( thermanName )을 그들에게 할당 했습니다. 호스트 이름으로 사용하고 ssh연결 하기 위해 전달하고 싶습니다 . 원하는 것을 달성하기 위해 다음을 수행했습니다.

~user/.ssh/config:

Host *
    IdentityFile ~/.ssh/id_rsa.user
    IdentityFile ~/.ssh/id_rsa.root
    ForwardAgent yes
    Compression yes
Host server rserver
    HostName 1.1.1.1
Host client* rclient* 172.16.*
    ProxyCommand ~/.ssh/get_client_ip.bash %h %p
Host client* server
    User user
Host rclient* rserver
    User root
Host 192.168.1.*
    Compression no

~user/.ssh/get_client_ip.bash( chmod +x-ed) :

#! /usr/bin/env bash

ssh -T -W $( ssh rserver "awk -F '[.,]' -v OFS='.' '/^"$1",/ { print \$2, \$3, \$4, (\$5 + 2) }' /etc/openvpn/ipp.txt" ):$2 server

간단히 입력하면 ssh -o ProxyCommand="ssh -T -W 172.16.0.4:22 server" 172.16.0.4(여기서 마지막 172.16.0.4(IP of client1)에는 실제로 아무런 의미가 없음) 연결이 올바르게 설정됩니다.

을 입력 ssh client1하면 오류가 발생합니다.

잘못된 패킷 길이 1349676916.

ssh_dispatch_run_fatal : UNKNOWN 포트 0에 연결 : 메시지 인증 코드가 잘못되었습니다

나는 후자가 정확히 이전과 동일하다는 것을 확인했다.

또한 베어 호출 bash ~/.ssh/get_client_ip.bash client1 22은에 대한 연결을 설정합니다 client1.

bash 스크립트로 묶인 프록시 명령을 처리하는 방법은 무엇입니까? 제공된 bash 스크립트 내부에서 표준 입력 및 출력 스트림을 리디렉션하기 위해 추가 작업을 수행해야합니까 ProxyCommand?

파이프 중간에 bash 스크립트의 일부로 직접 또는 간접적으로 실행 명령간에 차이가있는 것 같습니다.



답변

나는 프록시 스크립트를 서버 측 (대부분 bash 이스케이프 문제가 있음)에 배치했다 ~root/.ssh/get_client_ip.bash( 클라이언트의 해당 CommonName 에 IP를 제공함 openvpn).

#! /usr/bin/env bash

nc $( awk -F ',' '/^'$( sed 's/\./\\&/g' <<< "${1:$3}" )',/ { print $2 }' /etc/openvpn/ipp.txt | awk -F '.' -v OFS='.' '{ print $1, $2, $3, ($4 + 2) }' ) $2

또는 기반 status server-status.log(실제로 연결된 클라이언트 만 해당) :

nc $( awk '/ROUTING TABLE/, /GLOBAL STATS/' /etc/openvpn/server-status.log | head --lines=-1 | tail --lines=+3 | awk -F ',' '/,'$( sed 's/\./\\&/g' <<< "${1:$3}" )',/ { print $1 }' ) $2

~user/.ssh/config내 로컬 컴퓨터에서 약간 수정 되었습니다.

Host *
    IdentityFile ~/.ssh/id_rsa.user
    IdentityFile ~/.ssh/id_rsa.root
    ForwardAgent yes
    Compression yes
Host server rserver
    HostName server
Host rclient* rserver
    User root
Host client* server
    User user
Host rclient*
    ProxyCommand ssh rserver bash ~root/.ssh/get_client_ip.bash %h %p 1
Host client*
    ProxyCommand ssh rserver bash ~root/.ssh/get_client_ip.bash %h %p 0
Host 172.16.*
    ProxyCommand ssh -T -W %h:%p server
Host 192.168.1.*
    Compression no


답변