パスワードプロンプトなしでssh-addを自動的に実行するにはどうすればよいですか?


248

ネットワーク上の複数のコンピューター(静的イーサネット)の間でSSHを介して通信したい。それを行うには、特定のマシンにログインするたびにssh-addを実行する必要があります。一度セットアップすると、ログインまたは再起動するたびにパスフレーズを要求されないようにするにはどうすればよいですか私のマシン?

bash_profileファイルにいくつかの行を追加する方法があることは知っていますが、特定のマシンに再起動/ログインするたびにパスワードを入力する必要があります。

if [ -z "$SSH_AUTH_SOCK" ] ; then
    eval `ssh-agent -s`
    ssh-add
fi

回答:


348

これは、セキュリティと利便性のトレードオフの典型的な例です。幸いなことに、多くのオプションがあります。最も適切なソリューションは、使用シナリオと必要なセキュリティレベルによって異なります。

パスフレーズ付きsshキー、いいえ ssh-agent

これで、キーが認証に使用されるたびにパスフレーズを入力する必要があります。これはセキュリティの観点からは最適なオプションですが、最悪の使いやすさを提供します。これは、パスフレーズを繰り返し入力する負担を軽減するために、弱いパスフレーズが順番に選択されることにもつながります。

パスフレーズ付きssh-key、 ssh-agent

以下を追加すると、ログイン時にssh-key ~/.bash_profileが自動的に起動ssh-agentおよびロードされます。

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

これで、ログインするたびにパスフレーズを入力する必要があります。使いやすさの観点からは若干優れていますが、これにはssh-agent、ログインセッション中にキーを使用するかどうかに関係なく、パスフレーズの入力を求めるという欠点があります。また、各新規ログインは、ssh-agent明示的に強制終了されない限り、ログアウト後もメモリ内に追加されたキーで実行され続ける別個のインスタンスを生成します。

殺すためにssh_agent、ログアウト時にに次を追加します~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

または次の ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Collin Andersonのanswerのssh-agentように、ファイルシステム内の固定位置にエージェントへの永続的な通信ソケットを作成することにより、複数のインスタンスの作成を回避できます。これは、複数のエージェントインスタンスの生成よりも改善されていますが、ログアウト後も復号化されたキーを明示的に強制終了しない限り、メモリに残ります。

デスクトップでは、Gnome Keyring SSH Agentなどのデスクトップ環境に含まれるssh-agent は、ログインセッション中にssh-keyを初めて使用するときにパスフレーズのプロンプトを表示するように作成できるため、より優れたアプローチです。セッションが終了するまで、復号化された秘密鍵をメモリに保存します。

パスフレーズ付きssh-key、 ssh-ident

ssh-identssh-agentあなたに代わって管理し、必要に応じてIDをロードできるユーティリティです。にアクセスする必要がある端末、ssh、またはログインセッションの数に関係なく、必要に応じて1回だけキーを追加しますssh-agent。また、接続しているホストまたはディレクトリsshの呼び出し元に応じて、異なるエージェントと異なるキーセットを追加して使用できます。これにより、異なるホストでエージェント転送を使用するときにキーを分離できます。また、GitHubなどのサイトで複数のアカウントを使用できます。

有効にするにはssh-ident、インストールして、次のエイリアスをに追加します~/bash_profile

alias ssh='/path/to/ssh-ident'

パスフレーズ付きssh-key、 keychain

keychainは、ssh-agentユーザーに代わって管理しssh-agent、ログインセッションが終了しても実行し続けることができる小さなユーティリティです。後続のログインでkeychain、既存のssh-agentインスタンスに接続します。実際には、これは、再起動後の最初のログイン時にのみパスフレーズを入力する必要があることを意味します。その後のログインでは、既存のssh-agentインスタンスの暗号化されていないキーが使用されます。これは、パスワードcronなしのssh-keyがないジョブでパスワードなしのRSA / DSA認証を許可する場合にも役立ちます。

有効にするにはkeychain、インストールして、次のようなものを追加します~/.bash_profile

eval `keychain --agents ssh --eval id_rsa`

セキュリティの観点から、ssh-identそしてkeychainより悪いssh-agent特定のセッションの存続期間に制限の場合、彼らは高い利便性を提供します。のセキュリティを向上させるためにkeychain、一部の人々--clear~/.bash_profileキーチェーン呼び出しにオプションを追加します。これにより、上記のようにログイン時にパスフレーズを再入力する必要がありますがcron、ユーザーがログアウトした後もジョブは暗号化されていないキーにアクセスできます。keychain wikiページには、より多くの情報と例があります。

パスフレーズなしのssh-key

セキュリティの観点から、これは最悪のオプションです。秘密鍵は公開された場合に完全に保護されないためです。ただし、これは、再起動後にパスフレーズを再入力する必要がないことを確認する唯一の方法です。

ssh-key with passphrase、with ssh-agentパスフレーズを ssh-add スクリプトから渡す

ssh-addスクリプトからパスフレーズを渡すのは簡単なアイデアのように思えるかもしれませんが、例えばecho "passphrase\n" | ssh-add、これはssh-add パスフレーズを読み取らないstdin/dev/ttyように見えるほど単純ではなく、読み取りのために直接開きます

これが可能なの周りに働いたとのexpectインタラクティブなアプリケーションを自動化するためのツール。以下は、スクリプトに保存されたパスフレーズを使用してssh-keyを追加するスクリプトの例です。

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

セキュリティの観点から、パスフレーズはスクリプト内にプレーンテキストで保存されるため、これはパスワードなしのssh-keyを使用するよりもはるかに優れていることに注意してください。このアプローチを使用する場合はexpect、パスフレーズを含むスクリプトに適切なアクセス許可を設定し、キーの所有者のみが読み取り、書き込み、実行できるようにすることが重要です。


1
わかりましたが、コードを〜/ .bash_profileに配置すると、ログインするたびにパスワードを入力する必要がありますが、それも必要ありません。セキュリティについてはまったく心配していません。echo "pass \ n" | ssh-addが機能しない
-zdun8

3
@ user1607072ええ、それは答えで説明されているようにssh-agentスニペットがどのように~/.bash_profile動作するかです。あなたは見たいかもしれませんkeychainユーティリティ。ではkeychain、あなたは、再起動後の最初のログイン時にパスワードを入力する必要がありますが、それ以降のログインではkeychain、既存に接続しますssh-agentメモリ内の復号化されたキーを持つインスタンス。それとは別に、パスフレーズなしでssh-keyを生成するオプションがありますが、これはもちろんお勧めできません。
トーマスナイマン

3
@ user1607072より安全な方法の1つを強くお勧めしますssh-addが、スクリプトからパスフレーズを渡す方法があります。理由echo "pass\n" | ssh-addは機能しssh-addませんが、からパスワードを読み取らないが、読み取りのために直接stdin開きます/dev/tty。と呼ばれるユーティリティを使用して、これに対する回避策を含むように回答を更新しましたexpect
トーマスナイマン

1
@ user1607072ユースケースでは少しやり過ぎかもしれませんが、Kerberosをssh GSSAPIサポートと組み合わせて使用すると、パスワードなしのsshログインにも使用できます。sshの対応する認証方法が呼び出されgssapi-with-micます。これは通常、大規模なネットワークで使用されますが、これに興味がある場合はもちろん検討する価値があります。
トーマスナイマン

1
@ErickBrown:すでに答えここにsystemdログインマネージャーでユーザーの残留が無効になっている場合は、ログアウト時にSSHエージェントユニットを停止する必要があります。ユーザーの残留が有効になっている場合、systemdユーザーインスタンスとSSHエージェントユニットは、最後のログインセッションが閉じられた後も実行され続けます。
トーマスナイマン

93

これをに追加してから~/.bashrcログアウトし、再度ログインして有効にします。

if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add

これは、各リブート後に初めてログインするときにのみパスワードの入力を求めます。ssh-agent実行されている限り、同じものを再利用し続けます。


1
非常にきちんとした、この方法では1つのssh-agentのみを実行しています(@thomasNymanの2番目のソリューションのように複数のエージェントはセキュリティリスクのようです
...- drevicko

1
さまざまなサイトで調査し、さまざまな解決策を読んだ後、ここでのこれは最も明確で、ポイントにまっすぐなようです。非常に素晴らしい。+1
ベコ博士

1
`alias ssh = ssh-check-agent"を実行し、check-agentバージョンに上記を実行させます。a)1つのエージェントのみを取得し、b)必要な場合にのみエージェントを取得します
エリックアロネスティー16

2
-sがデフォルトだと思うので、すでにそれを行っています。
コリンアンダーソン

1
ssh-add -lそれはあなたが最後のコマンドと使用からのgrepをカットすることができていないエージェントはアイデンティティを持って、0と1の終了コードを返しますssh-add -l > '/dev/null' || ssh-add
グラントハンフリーズ

16

OPの質問と密接な関係はありませんが、他の人にとっては役立つかもしれません。7.2.0からssh(1)には、最初の認証時にssh-agentにキーを追加できるオプションがあります。オプションがあるAddKeysToAgentとに設定することができyesnoask、またはconfirm、システム全体または個人の上の.ssh/configファイル。

参照:https : //www.openssh.com/txt/release-7.2


2
.ssh/configこのファイルを初めて使用する人に適用されます。これは、たとえば、その背後でssh使用するものすべてに適用され、ホストごとに実行できます。sshscp
SEoF

ログインしてgit pullをしようとするたびに、パスワードの入力を求められます。
trainoasis

@trainosis問題は、おそらく将来使用するために復号化されたキーをメモリに保持するために実行されているssh-agentインスタンスがないことです。ssh-agentを使用する場合、ログインセッションごとに1回だけ、指定されたキーのパスワードを入力する必要があります。
エストラーダ

7

ssh-agent さまざまなロック解除されたssh-keysをキャッシュするため、ssh-keysをパスワードで保護できますが、毎回入力する必要はありません。

ロックされていないキーをキャッシュするには、明らかにそれらのキーのロックを解除する必要があります。パスフレーズでロックされているキーのロックを解除するには、明らかにこれらのパスフレーズを知る必要があります。

人間からの許可を必要としない方法(「パスワードの入力」など)により、システムが安全でなくなるだけではありません。また、ssh-agentの目的全体が無意味になります。

これをすべて言ったので、パスワードで保護されていないsshキーを使用できます(Enterキー生成中にパスワードを要求されたときにヒットします)。パスワードssh-agentがないので、キャッシュする(しない)ためにパスワードを尋ねる必要はありません。


キーが適切にユーザーのみ許可されている限り、許可なしのキーよりもssh-agentにはほとんど利点がありません。ログインサーバーにsshするのが好きです。そして、そのサーバーには無許可のキーがたくさんあり、それぞれが他の1つのサーバーのロックを解除するためにのみ使用できます。ログインサーバーは他に何もしないので、ハッキング/なりすましなどがはるかに困難です...他のサーバーはパスワードアクセスがなく、キーのみです。
エリックアロネスティ16

5

SSHパスフレーズを自動化する回避策を次に示します。

  1. パスフレーズを標準出力に出力する1行のスクリプトを作成します。例:

     echo 'echo MY_SSH_PASSWORD' > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password
    

    重要:パスワードを履歴に保存ないように、先頭のスペースを必ずコピーしてください

そして、以下のいずれかの方法を使用します。

  • 標準入力アプローチを使用する:

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add -
    
  • または名前付きパイプアプローチ:

    1. 名前付きパイプを作成します(プロセス置換を試すこともできます):

      mkfifo --mode 0600 ~/.ssh_fifo
      
    2. ssh-add認証に使用されるプログラムを指定して実行します。

      cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo
      

    参照:man ssh-add詳細を読むためにSSH_ASKPASS


2
これecho my_passphraseは大きなセキュリティホールです。まず、パスワードを入力すると、使用するシェルの履歴ファイルにパスワードがクリアテキストで表示されます。また、2番目のコマンドライン引数は、Unix(ps -ef)で誰でも読み取り可能です。コマンドライン引数にパスワードを入れないでください!
16

1
@ceving先行スペースを追加すると、履歴ファイルの問題が解決します。追加情報を追加しました。
ケノーブ

@kenorb:ps出力に表示されるパスワードの大きな問題は解決しません。通常、履歴ファイルは所有しているユーザーのみが読み取り可能ですが、コマンドラインはシステム上のすべてのユーザーが読み取り可能です。
トーマスナイマン

4

ログイン時にssh-add(ssh-agentを開く必要がある)をお勧めしません。これは、ssh-agentセクションが終了するタイミングを制御できず、1つのログインセクションでキーファイルを使用する必要がない場合にセキュリティリスクが発生する可能性があるためです。

むしろ、すべてのキーファイルが自動的に追加されたssh-agentのセクションサブシェルを開き、sshを使用する必要があるときに呼び出されるスクリプトを作成することをお勧めします。採用できる場合は、読み進めてください。

次の2つの選択肢があります。

  1. キーファイルが盗まれた場合にセキュリティ弱いキーのすべてのパスフレーズを削除します。(したがって推奨されません

  2. キーに同じパスフレーズを使用します。その後、ssh-add keyfile1 keyfile2 ...セクションごとにパスフレーズを1回入力するだけで済みます。

どちらの場合でも、次のようなスクリプトファイル「ssh_keys_section.sh」を作成できます。

#!/bin/bash
# This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once.
# This agent ends when you type `exit` to close the sub-shell.
exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash"

備考:

  • パスフレーズを変更または削除するコマンド: ssh-keygen -p -f keyfile
  • サブシェル内では、次のようなコマンドを使用して、同じロック解除されたキーを共有する複数の端末をフォークすることもできます/path/to/yourterminal &(OSに依存)

たとえば、Cygwin内のWindowsでは、/path/to/yourterminal &==>mintty &
ジョニーウォン

2
if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then
  eval $(ssh-agent)
  ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock

ssh_keys=$(find -E ~/.ssh -type f -regex '.*(rsa$|pem)')
ssh_agent_keys=$(ssh-add -l | awk '{key=NF-1; print $key}')

for k in "${ssh_keys}"; do
    for l in "${ssh_agent_keys}"; do
        if [[ ! "${k}" = "${l}" ]]; then
            ssh-add "${k}" > /dev/null 2>&1
        fi
    done
done

2

以前は、steampoweredが言及したスクリプトを使用していましたが、ファイルを置き去りにしないため、以下のスクリプトを作成しました。

zshシェルのみでの作業。

#!/bin/sh

AGENT_BIN=`which ssh-agent`
AGENT_ADD_BIN=`which ssh-add`
AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" '$1==user && $8==cmd{print $2;exit;}'`
if [ -z "$AGENT_BIN" ]; then
    echo "no ssh agent found!";
    return
fi
if [ "" -eq "$AGENT_PID" ]; then
    if read -sq "YN?Do you want to unlock your ssh keys?"; then
        echo ""
        output=`$AGENT_BIN | sed 's/echo/#echo/g'`
        eval $output
        $AGENT_ADD_BIN
    fi
else
    for f in "/proc/"*
    do
        cmdline=`cat "$f/cmdline"`
        if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then
            export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP '((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)'`
            export SSH_AGENT_PID=${f##*/}
            break;
        fi
    done
fi

1
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

ここにクレジットを与える:https : //www.cygwin.com/ml/cygwin/2001-06/msg00537.html

このソリューションはここでも承認されています:http : //mah.everybody.org/docs/ssh


1

SSHのシングルサインオンソリューションは、私につながる可能性がありますpam_ssh

この記事によると、コンセプトは次のとおりです。

sshを介して複数の* nixベースのマシンを使用している場合、別のボックスにアクセスするたびにパスワードを常に入力しなければならないことにうんざりしているでしょう。別のパスワード(最初にサインオンしたとき以外のパスワード)を入力しなくても、sshにアクセスできるすべてのマシンに安全にアクセスできる方法があります。


これは実際には非常に簡単です。基本的には、公開/秘密キーペアを作成して他のマシンに対して自分自身を認証し、ログオン後にPAMにエージェントを起動させて、すべてのリモートにアクセスするためのシングルサインオンソリューションを提供しますマシン。このガイドでは、これを設定する方法を説明します。

これが実際に機能することを確認していません。


0

これを~/.bashrcファイルに追加します。

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key

これが質問にどのように関係しているかわかりません。これは、後続のログインでパスワードの入力を求められないことに関するものです。
クリスダウン14年

0

(おそらくパスワードなしの)キーを追加し、Xのssh-add下で実行している場合でも、パスワードが何であってもプロンプトが表示されないようにするには:

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null

終了ステータスは、成功または失敗を示します。


0

パスワードマネージャーとしてタツノオトシゴを実行している場合 ...おそらくあなたは; D

あなたが探している目標を達成する別のソリューションは、ログイン時に自動ロック解除するためにタツノオトシゴにsshキーを追加するだけです。これの主な利点は、gdmを介してログインした後、またはキーにパスワードが設定されている場合でも、ログインした後にキーのパスワードを入力する必要がないことです。これには、秘密鍵と公開鍵の両方が必要です。また、タツノオトシゴの命名規則に従う必要があります。デフォルトは受け入れ可能です(秘密鍵の場合はid_rsa、公開鍵の場合はid_rsa.pub ...本当にprivatekeynameおよびprivatekeyname.pubであるものすべて

ログイン時に自動ロック解除のためにタツノオトシゴにsshキーを追加するには; (fedora25では、パスが他のディストリビューションのどこにあるのかわかりませんが、非常によく似ています)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here

私にとっては

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa

(タツノオトシゴは、私の場合の公開鍵はid_rsa.pubであると自動的に想定します)

コマンドを実行した後、タツノオトシゴはかわいいgtkパスワードフィールドをポップして、秘密鍵のパスワードを入力します。または、パスワードなしでキーを生成した場合は空白のままにします。

タツノオトシゴは、すべてがうまくいった場合、プロンプトを表示しません。ターゲットマシンにSSH接続する必要があります。その後、タツノオトシゴは再びパスワードでキーをロック解除するように促します(これは一度だけです)が、今回は少し違って見えるはずです; )、ログイン時にキーのロックを解除するオプションを提供する場合、目標を達成するにはこのオプションをオンにする必要があります。

すべての回答を読んでいなかったという理由だけで、この回答を試みる前に、誰もがssh-addで行うように言ったことを取り消すことをお勧めします。そうしないと、キー、idkに何か悪いことが起こる可能性があります。


0

これが決定的なスクリプトです。

$ PASSWを更新し、ターミナルにコピーアンドペーストします

# <sshpass> via typinator
# Updated: 2017-01-18_21h36
#
# apt-get update -y; apt-get install expect -qy

# Pass this value to ssh-add
PASSW="myfancypass123"

# Define a name for this script
THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh

# Create a fresh directory to work from / Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la


# Output our bash script file - BEGIN
cat <<< '
#!/bin/bash

set -u     # Stop if an unbound variable is referenced
set -e     # Stop on first error
export HISTIGNORE="expect*";

# Normal CMDs
echo && echo "The process should take about 10 seconds:" && echo
eval "$(ssh-agent -s)"; sleep 0.5;

# Define VAR passed when this bash-script was launched
password="$@"

# Launch the expect magic
expect -c "
    spawn ssh-add /root/.ssh/id_rsa
    expect "?assword:"
    send \"$password\r\"
    expect "?password:"
    send \"$password\r\"
    expect eof"

export HISTIGNORE="";
export password="";
' > $THIS_SCRIPT
# Output our bash script file - END


# Ensure we are in the right path
cd ~/temp; ls -la; sleep 1;

# Run the bash script
chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password;

# Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la

0

私が知っている最善の方法は、この質問で満足のいく答えを見つけることができなかったため、以前の仕事から改作したPAMログインスクリプトを使用することです。

パスフレーズは、システムパスワードと強力な派生機能で暗号化されて保存されます。ログイン時に、システムパスワードを使用してパスフレーズを復号化し、エージェントに追加します。

https://github.com/capocasa/systemd-user-pam-ssh

提示されている他のすべてのソリューションに対する利点は、ブート時に手動でssh-addを実行するのと同等のセキュリティをゼロの労力で兼ね備えていることです。追加のツールは不要で、ほとんどのシステムにデフォルトですでにインストールされている追加の依存関係が1つあります(OpenSSL)。


0

macOSでの私のセットアップは次のとおりです(.zshrc、または.bash_profilebashの人向け):

# Kill then Load the ssh-agent and set the necessary env variables it outputs
sshRestart() {
    # if all else fails
    # pkill -u $(whoami) ssh-agent;

    if [ -n "$SSH_AUTH_SOCK" ] ; then
        eval `/usr/bin/ssh-agent -k`
    fi
    eval `ssh-agent -s`
    ssh-add ~/.ssh/YOUR_KEY_FILE
    echo "Restarted SSH agent"
}

if [ -z "$SSH_AUTH_SOCK" ] || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] ; then
    eval `ssh-agent -s` > /dev/null 2>&1
    ssh-add ~/.ssh/YOUR_KEY_FILE > /dev/null 2>&1
fi

|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]デフォルト値はなので、この部分はmacOSで必要です/private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners。そうでない場合、@ Thomas Nymanの包括的な答え$SSH_AUTH_SOCKは、常に何かに設定されているため失敗します。

次に.zlogout(または.bash_logoutbashの人向け):

if [ -n "$SSH_AUTH_SOCK" ] ; then
    eval `/usr/bin/ssh-agent -k`
fi

macOS Mojave 10.14.5でテスト済み

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.