다른 네임스페이스에서 SSH 데몬을 실행하여 클라이언트 연결

다른 네임스페이스에서 SSH 데몬을 실행하여 클라이언트 연결

sshd적절한 물리적 장치의 (비초기화) 네임스페이스에서 실행 중인 경우 :

ip netns exec physical sshd

이 인터페이스에 연결된 클라이언트가 다른 기본 네임스페이스(내 경우에는 init 네임스페이스)가 있는 셸을 가져오는 것이 가능합니까?

실제로 클라이언트 명령은 실행과 같습니다 ip netns exec physical <cmd>. 물론 의미가 있지만 이 경우에는 내가 원하는 것이 아닙니다.

답변1

아, 해결책을 찾았습니다. 알려진 netns네임스페이스 를 /var/run/netns/;man namespaces/proc/<PID>/ns/

따라서 일반적으로 존재하지 않더라도 init 네임스페이스를 여기에 추가할 수 있습니다.

ln -s /proc/1/ns/net /var/run/netns/init

그런 다음 클라이언트가 연결할 때 해당 네임스페이스에서 셸을 열도록 강제할 수 있습니다 sshd. 선택적으로 다음과 같습니다.

-o ForceCommand='sudo ip netns exec init sudo /bin/bash --login'

따라서 데몬은 지정된 비init 네임스페이스에서 계속 실행되지만 클라이언트는 연결되어 즉시 init(PID 1) 네트워크 네임스페이스에 들어갑니다.


참고: 루트(!)로 이동하는 대신 연결 사용자를 유지하고 getent passwd일반적인 로그인 셸을 검색하는 데 사용할 수도 있습니다.

# instead of sudo /bin/bash
# *important*: we give ForceCommand='' in *single* quotes
#     so `whomai` et al. are not evaluated until the ForceCommand is invoked.
sudo --user="$(whoami)" "$(getent passwd "$(whoami)" | cut -d: -f7)"

ssh user@host cmd$SSH_ORIGINAL_COMMAND그리고 클라이언트( )가 제공한 명령을 명령 앞부분 에서 가져와 유지합니다.

관련 정보