[debian-users 00656] Re: grepの振る舞いがホストによって異なる
Kenzi NOIKE
knoike @ gmail.com
2020年 6月 1日 (月) 09:07:41 JST
野池です.
> 7398 ? Ss 0:00 ssh-agent -s
ps の出力で,7398 の前に空白文字があるからではないでしょうか.
(桁数が異なる PID がある場合に,ps が空白文字でパディング表示している)
よい方法かどうかわかりませんが,
grep "^${SSH_AGENT_PID}.*ssh-agent"
を
grep "^.*${SSH_AGENT_PID}.*ssh-agent"
とするとマッチするようになるのではないでしょうか.
2020年6月1日(月) 8:42 Yasuhiro KIMURA <yasu @ utahime.org>:
>
> 木村と申します。
>
> grepの振る舞いがホストによって異なる、という奇妙な問題が発生しており、
> その原因が判らなくて困っているので相談させてください。
>
> 私はログインシェルとしてzshを使っているのですが、最近.zloginに以下のコー
> ドを追加しました
>
> ----------------------------------------------------------------------
> 01: setup_ssh-agent () {
> 02: local savedir=${HOME}/.ssh/ssh-agent
> 03: local savefile=${savedir}/$(hostname -s)
> 04:
> 05: if [ ! -d ${savedir} ]
> 06: then
> 07: mkdir -p ${savedir}
> 08: chmod 700 ${savedir}
> 09: fi
> 10: if [ ! -f ${savefile} ]
> 11: then
> 12: ssh-agent -s > ${savefile}
> 13: chmod 600 ${savefile}
> 14: eval $(cat ${savefile}) > /dev/null
> 15: ssh-add
> 16: else
> 17: eval $(cat ${savefile}) > /dev/null
> 18: fi
> 19: if ! ps gxwww | grep "^${SSH_AGENT_PID}.*ssh-agent" > /dev/null
> 20: then
> 21: ssh-agent -s > ${savefile}
> 22: chmod 600 ${savefile}
> 23: eval $(cat ${savefile}) > /dev/null
> 24: ssh-add
> 25: fi
> 26: }
> 27:
> 28 setup_ssh-agent
> ----------------------------------------------------------------------
>
> このコードの意図は、
>
> * ログインした時にssh-agentが動いていなければ、ssh-agentを起動して鍵を
> 追加する
> * 既に動いている場合には、環境変数SSH_AGENT_PIDとSSH_AUTH_SOCKの値を既
> に動いているものに合わせて設定する
>
> です。
>
> それで、CentOSやFreeBSDのホストではこのコードが意図通りに動いているの
> ですが、Debianだと、あるホストでは意図通りに動くが、別のホストでは意図
> 通りに動かない、という問題が発生しています。
>
> そこで何が起こっているのかを調査した結果、↑のコードの19行目の
>
> ps gxwww | grep "^${SSH_AGENT_PID}.*ssh-agent"
>
> の振る舞いがホストによって異なることが判りました。
>
> 正常に動作するホストでは、
>
> ----------------------------------------------------------------------
> yasu @ kusanagi[2007]% type grep
> grep is /bin/grep
> yasu @ kusanagi[2008]% echo $SSH_AGENT_PID
> 29943
> yasu @ kusanagi[2009]% ps gxwww
> PID TTY STAT TIME COMMAND
> 29920 ? Ss 0:00 /lib/systemd/systemd --user
> 29921 ? S 0:00 (sd-pam)
> 29943 ? Ss 0:00 ssh-agent -s
> 29974 ? SLs 0:00 /usr/bin/gpg-agent --supervised
> 30104 ? S 0:00 sshd: yasu @ pts/0
> 30105 pts/0 Ss 0:00 -zsh
> 31491 pts/0 R+ 0:00 ps gxwww
> yasu @ kusanagi[2010]% ps gxwww | grep "^${SSH_AGENT_PID}.*ssh-agent"
> 29943 ? Ss 0:00 ssh-agent -s
> yasu @ kusanagi[2011]%
> ----------------------------------------------------------------------
>
> のように、SSH_AGENT_PIDで指定されたssh-agentのプロセスが存在する場合に
> は、psの出力のそのプロセスの行が、grepの検索に一致するのですが、正常に
> 動作しないホストでは、
>
> ----------------------------------------------------------------------
> yasu @ samidare[2009]% type grep
> grep is /bin/grep
> yasu @ samidare[2010]% echo $SSH_AGENT_PID
> 7398
> yasu @ samidare[2011]% ps gxwww
> PID TTY STAT TIME COMMAND
> 7373 ? Ss 0:00 /lib/systemd/systemd --user
> 7374 ? S 0:00 (sd-pam)
> 7398 ? Ss 0:00 ssh-agent -s
> 28962 ? S 0:00 sshd: yasu @ pts/0
> 28963 pts/0 Ss 0:00 -zsh
> 30026 pts/0 R+ 0:00 ps gxwww
> yasu @ samidare[2012]% ps gxwww | grep "^${SSH_AGENT_PID}.*ssh-agent"
> yasu @ samidare[2013]%
> ----------------------------------------------------------------------
>
> のように、psの出力のssh-agentのプロセスの行が、grepの検索に一致しませ
> ん。
>
> なお、双方のホストについて言えることは以下のとおりです。
>
> * OSは双方ともDebian 10 amd64
> * インストールされているパッケージは異なる
> * 双方ともunattended-upgradesをインストールしているので、Debian 10の最
> 新バージョンになっていると言えるはず
> * Zshの設定ファイル(.zlogin,.zlogout.zshenv,.zshrc)については、双方で
> 全く同じものを使っているので、PATHやロケールなどの個人設定は全く同じ
> になっているはず。
>
> 正直なところ、何が原因で動作の違いが起きるのか、さっぱり判らず行き詰まっ
> ている状態なので、どんなことでもこれはという点がありましたら、指摘して
> いただけるとありがたいです。
>
> よろしくお願いします。
>
> ---
> 木村 康浩
> _______________________________________________
> debian-users mailing list
> debian-users @ debian.or.jp
> https://lists.debian.or.jp/mailman/listinfo/debian-users
--
// Kenzi NOIKE
debian-users メーリングリストの案内