ssh-agent 소켓을 chroot로 전달하는 데 socat을 사용할 수 있습니까?

ssh-agent 소켓을 chroot로 전달하는 데 socat을 사용할 수 있습니까?

SSH를 통해 연결하는 원격 서버에 사용자 지정 Debian 환경을 구축하고 있습니다. 여기에는 debootstrap 환경을 구축한 다음 해당 환경으로 루트를 지정하여 사용자 정의 설치 프로그램을 실행하는 작업이 포함됩니다. 사용자 정의 설치 프로세스의 일부로 SSH 자격 증명 my ssh-agent를 다시 사용하여 chroot 환경에서 추가 원격 서버로 SSH를 통해 이동할 수 있도록 설치 프로그램이 필요합니다.밖의chroot는 알고 있습니다.

나는 이것을 어떻게 해야할지 생각할 수 없습니다. 원칙적으로 나는생각하다다음과 같이 chroot를 호출하기 전에 socat를 사용하여 $SSH_AUTH_SOCK를 chroot 환경으로 전달할 수 있어야 합니다.

socat UNIX-CONNECT:$SSH_AUTH_SOCK UNIX-LISTEN:chroot_root$SSH_AUTH_SOCK,fork &
sudo -E chroot chroot_root /bin/bash

그러나 그것은 chroot 내부에서 ssh를 사용하려고하자마자 socat에서 깨진 파이프를 제공합니다. 이는 이해할 수 있다고 생각합니다.

이 문제를 해결할 방법이 있나요? chroot하기 전에 SSH 마스터 소켓을 설정하고 chroot 내부의 모든 항목에 사용하는 대체 방법이 있지만 설치 프로그램을 상당히 방해적으로 다시 작성해야 하므로 다음과 같습니다.정말그 계획에는 관심이 없어요.

업데이트

소켓에 대한 하드 링크를 생성하는 것만으로도 원하는 효과를 얻을 수 있다는 것이 밝혀졌습니다. 솔직히 그게 효과가 있을 거라고는 기대하지 않았어요.

답변1

SSH 에이전트를 chroot로 전달할 수 있지만 몇 가지 과정을 거쳐야 합니다. 첫 번째는 chroot에서 소켓에 액세스할 수 있도록 하는 것이고 두 번째는 chroot 내의 사용자에게 이에 대해 알리는 것입니다.

socat소켓을 사용할 수 있도록 하려면 권한이 올바르게 설정되어 있는 한 OP의 사용 제안이 작동합니다. 스크립트를 사용하여 chroot를 시작한다고 가정하면 다음 코드 조각은 socatchroot에 에이전트 소켓을 제공하는 데 사용됩니다.

# Set up a SSH AGENT forward socket
if [ -n "$SSH_AUTH_SOCK" ]
then
  _dir="$mnt$(dirname $SSH_AUTH_SOCK)"
  _owner=$(awk -F':' '{if ($1=="alice") {print $3":"$4}}' $mnt/etc/passwd)
  mkdir "$_dir"
  chown "$_owner" "$_dir"
  socat UNIX-CONNECT:$SSH_AUTH_SOCK \
        UNIX-LISTEN:$mnt$SSH_AUTH_SOCK,fork,user=${_owner%:*} &
  socat_pid=$!
  export SSH_AUTH_SOCK
fi

이는 사용자의 uid및 (gid앨리스예에서는 에이전트에 액세스할 수 있어야 하는 chroot 내입니다. 그런 다음 해당 디렉토리를 생성하고 socatOP와 거의 동일한 방식으로 설정합니다 . 추가 사항은 user=${_owner%:*}chroot 내의 소켓에 uid를 설정하는 pirce입니다.앨리스접근할 수 있습니다.

그런 다음 socatchroot가 종료될 때 제거될 수 있도록 PID를 기억합니다. 마지막으로 SSH_AUTH_SOCKchroot 내에서 사용할 수 있도록 변수를 내보냅니다 .


이제는 에이전트 프로세스를 소유한 일반 사용자를 통해서만 스크립트가 실행될 chroot수 있다고 root생각합니다 . sudo이것이 정확하다면 sudo환경 변수를 스크립트에 전달하도록 허용하는 작업이 한 가지 더 있습니다. 이렇게 하려면 다음을 편집하고 /etc sudoers(승인된 메커니즘은 다음과 같습니다 sudo visudo) 추가하세요.

Defaults env_keep+=SSH_AUTH_SOCK

/etc/sudoers이 변경 사항은 chroot 내에서 sudo사용되는 경우(예: 에서 로 전환 root) chroot 내에서도 이루어져야 합니다 alice.

다음은 일반 사용자가 보는 chroot 내의 에이전트 소켓의 예입니다.

$ ls -l $SSH_AUTH_SOCK
srwxr-xr-x 1 alice root 0 Feb  1 15:06 /tmp/ssh-q1ntaubl6I2z/agent.1443

관련 정보