SSHエージェント管理スクリプト:十分ですか?エラーがありますか?

SSHエージェント管理スクリプト:十分ですか?エラーがありますか?

以下は、SSHプロキシ設定を管理するために使用するものです。

#!/bin/echo "Must source this:" 
## Ensure that ~/.ssh/env contains valid values

unset SSH_AGENT_PID SSH_ENV_REFRESH

[ -r ~/.ssh/env ] && . ~/.ssh/env
[ -n "$SSH_AGENT_PID" ]  || {
    # No env file (or it's badly corrupted:
    eval $(ssh-agent &>/dev/null) &> /dev/null
    SSH_ENV_REFRESH=1
    }

# Ping the agent process:
kill -0 "$SSH_AGENT_PID" >& /dev/null || {
    # No process, so start a new one:
    eval $(ssh-agent &>/dev/null) &> /dev/null
    SSH_ENV_REFRESH=1
    }

ssh-add -l &> /dev/null
[ "$?" -gt 1 ] && {
    # Process alive but unable to be contacted
    # for some reason (wedged/defunct process,
    # or damaged/corrupt UNIX domain socket node?)

    # So kill it:
    kill "$SSH_AGENT_PID" >& /dev/null
    # ... with extreme prejudice if necessary:
    kill -0 "$SSH_AGENT_PID" >& /dev/null \
    || kill kill -9 "$SSH_AGENT_PID" >& /dev/null

    # ... and start a new one
    eval $(ssh-agent &>/dev/null) &> /dev/null
    SSH_ENV_REFRESH=1
    }

[ -z "$SSH_ENV_REFRESH" ] || {
    # Over-write old env file:
    printenv | grep "^SSH_A" > ~/.ssh/env
    # Append export command:
    echo "export SSH_AGENT_PID SSH_AUTH_SOCK" >> ~/.ssh/env

    # Load the (null-passphrase) identites into the agent:
    ssh-add  < /dev/null &> /dev/null
    }

. ~/lib/sshagent.shその目的は()から派生します。~/.bashrc他のログインやシェルの起動ファイル...またはクローン操作も可能です。それは私にとって効果的でしたが、ここにいる人がそれを見直し、私が逃した極端なケースについてアドバイスを提供したいと思います。

~/.bash_loginで実行しようとしましたが、場合によってはシェルが設定を選択できないことがありました(Xディスプレイマネージャ、リモートSSH非ログインセッションのようです...コマンド呼び出しを使用)SSH)。場合によっては、何らかの理由でエージェントプロセスが再起動されても、以前の設定は保持され更新されません。だから私は実行します~/.bashrc提案されているように偽の出力を避けるようにしてください。~/.bashrc一般的に言えば。

それでは、明らかなコーナーケースやバグがありますか?これがこのようなことに意味がありますか?/etc/bashrc?他のシェルに合理的に移植可能ですか?

ベストアンサー1

&> /dev/nullスクリプトの移植性の問題の1つは、stdoutおよびstderrリダイレクトを使用することです。これは他のシェルには必ずしも適用されない bashism です。 (私は最近これにかみました。)より移植可能な方法は> /dev/null 2>&1

おすすめ記事