Gentoo Linux の wiki で、動的 jumphost リストに関する次の記述に出くわしました。
ProxyCommand ssh $(echo %h | sed 's/+[^+]*$//;s/\([^+%%]*\)%%\([^+]*\)$/\2 -l \1/;s/:/ -p /') nc -w1 $(echo %h | sed 's/^.*+//;/:/!s/$/ %p/;s/:/ /')
sed動作しますが、式を完全 に理解したいと思います。
元のリファレンスを読んで、Host *+*パターンを使用して、コマンドの再帰呼び出しをよく理解することができました。しかし、2 つの質問があります。
- 式は を使用し
%%ます。理由を確認するために を使用ssh -vしたところ、sshクライアントが を解析する$HOME/.ssh/configと、最初の%が取り除かれているように見えることがわかりました。上記を確認しようとして、openssh のソース コードをダウンロードしましたがreadconf.c、手がかりが得られませんでした。私は OpenSSH ソース コードを初めて使用しますが、デバッグ情報を使用してコンパイルすることを恐れませんgdb。それにもかかわらず、私の推測を確認するためのより迅速な方法があれば、ヒントをいただければ幸いです。 また、次の
ssh -vことも明らかにしました。[...] debug1: Executing proxy command: exec ssh $(echo zackp%node0+zackp%node1+node3 | sed 's/+[^+]*$//;s/\\([^+%]*\\)%\\([^+]*\\)$/\\2 -l \\1/;s/:/ -p /') [....]つまり、サブシェル
\(で a を使用してエスケープされるようになりました。\なぜこれが必要なのですか?
ありがとう、
――ザック