Match exec
そこで、 IP の一致を取得するために使用しているユーザー用の SSH 構成ファイルがあります。
Match exec "echo %h | grepcidr 192.168.12.0/20 &>/dev/null "
User ubuntu
ProxyCommand ssh my-bastion -W %h:%
IdentityFile ~/.ssh/target.pem
これは私のホストでは問題なく動作しますが、openssh-clientがインストールされているコンテナで起動しようとしましたが、コマンドが成功したとみなされるため(ネットワークをターゲットにしていない場合でも)、ssh接続が失敗し、要塞を通過しようとします。
debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 0
私のホストでは返されます
debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 1
これはコンテナのsshコマンドが返すものであるはずです
調べてみると、コンテナ内のsshコマンドは を使って起動されるsh -c
のに対し、ホスト上で起動されるsshコマンドは で起動さbash -c
れることがわかりました。コマンドラインで両方をテストし、コマンドの戻り値をチェックすることで、これが原因であることが確認できます。echo $?
ssh コマンドにのみ使用するように指定する方法はありますかbash
?
SHELL
コマンドラインの先頭で環境変数を上書きすることができます
SHELL=/bin/bash ssh [email protected]
しかし、私の目標は、その背後で Ansible を使用することなので、すべての SSH のシェルを無効にしたいと思います。
答え1
で始まる代替コマンドを指定するかbash -c
、Bashism (つまり、&>
stdout と stderr のリダイレクト) を削除することができます。
はC 関数Match exec
のようなものを使用するためsystem()
、どのシェルを提供するかはランタイム システム (C ライブラリ) によって決まります。ほとんどの Unix システムでは、これはsh -c
コマンド ライン全体と変換されます。この部分は変更できません。