
私はリモートサーバーにカスタム Debian 環境を構築しており、SSH 経由で接続しています。これには、debootstrap 環境を構築し、その環境に chroot してカスタムインストーラーを実行することが含まれます。カスタムインストールプロセスの一部として、インストーラーが chroot 環境から別のリモートサーバーに ssh で接続できるようにする必要があります。そのためには、ssh-agent の 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 内でソケットにアクセスできるようにすることです。2 番目の手順は、chroot 内のユーザーにその旨を通知することです。
ソケットを使用できるようにするには、権限が適切に設定されている限り、OP の提案を使用するのが効果的ですsocat
。chroot を起動するスクリプトを使用していると仮定すると、次のスニペットを使用してsocat
chroot でエージェント ソケットを提供します。
# 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 内のディレクトリ (この例では) からエージェントにアクセスできるはずです。次に、そのディレクトリを作成し、socat
OP とほぼ同じ方法で を確立します。追加されているのは、user=${_owner%:*}
chroot 内のソケットに uid を設定する pirceです。アリスアクセスできます。
次に、socat
chroot の終了時に PID を破棄できるように PID を記憶します。最後に、SSH_AUTH_SOCK
変数をエクスポートして、chroot 内で使用できるようにします。
現在、chroot
は によってのみ実行できるのでroot
、スクリプトはsudo
エージェント プロセスを所有する通常のユーザーから によって実行されると推測します。これが正確であれば、もう 1 つ行うべきことは、sudo
スクリプトに環境変数を渡すことを許可することです。これを行うには、 を編集し/etc sudoers
(承認されたメカニズムは ですsudo visudo
)、以下を追加します。
Defaults env_keep+=SSH_AUTH_SOCK
がchroot 内で使用される場合 (つまり、 から に切り替える場合) 、この変更は/etc/sudoers
chroot 内でも行う必要があります。sudo
root
alice
以下は、通常のユーザーから見た chroot 内のエージェント ソケットの例です。
$ ls -l $SSH_AUTH_SOCK
srwxr-xr-x 1 alice root 0 Feb 1 15:06 /tmp/ssh-q1ntaubl6I2z/agent.1443