web-dev-qa-db-ja.com

ssh-agentはサーバーで毎回起動する必要があります

私はこのビットバケットチュートリアルを使用して、gitリポジトリへのsshアクセスを提供しました: https://confluence.atlassian.com/pages/viewpage.action?pageId=270827678

しかし、今度はgitを使用するたびに、次のようにするまで権限がないと表示されます。

ssh-agent /bin/bash
&&
ssh-add ~/.ssh/id_rsa

なんでこんなことが起こっているの?ローカルマシンで簡単に実行できましたが、リモートサーバーが正常に機能していません。

更新

私がする時

ssh-agent

私はこれを手に入れます

SSH_AUTH_SOCK=/tmp/ssh-blGr6z5dJjit/agent.14183; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14184; export SSH_AGENT_PID;
echo Agent pid 14184;

しかし、git fetchを実行しようとすると、次のようになります。

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

キーを追加した後でも

ssh-add ~/.ssh/bitbucket

このエラーが発生します

Could not open a connection to your authentication agent.
4
Tzook Bar Noy

質問は少し不明確だったので、この答えは本当に別の質問のためかもしれません。しかし、答えはまだ他の人に役立つかもしれないので、私はそれを維持する価値があると思います。

_ssh-agent /bin/bash_と入力すると、ssh-agentのインスタンスが開始され、そのシェルがアクティブである限り実行され続けます。デフォルトでは、そのssh-agentはそのシェルによってのみ使用され、そのシェルを閉じると終了します。

代わりに_ssh-agent_と入力するだけの場合、エージェントはバックグラウンドで開始され、シェルを閉じても実行を続けます。 ssh-agentコマンドは、stdoutにコマンドを出力します。このコマンドを入力して、そのssh-agentの使用を開始できます。毎回これらのコマンドを入力する必要があります。

eval $(ssh-agent)と入力すると、バックグラウンドのssh-agentを起動し、現在のシェルで使用を開始できます。ただし、_SSH_AUTH_SOCK_環境変数をどこかに保存し、再度ログインする場合は設定する必要があります。

その背景情報が整ったので、エージェントを常に利用できるようにする方法について3つの提案があります。

  • サーバーでスクリーンセッションを使用します。画面タイプeval $(ssh-agent) ; screenを開始すると、そのエージェントはサーバー上で実行されたままになり、後でその画面に再度接続した場合でも、使用するエージェントが記憶されます。
  • _~/.bash_profile_ファイルにコマンドを挿入して、アクティブなエージェントが存在する場合はそれを見つけ、_SSH_AUTH_SOCK_環境変数を設定します。
  • Sshエージェント転送を使用して、サーバーではなくクライアントでエージェントを使用します。使用する前に、そのセキュリティへの影響を理解してください。

_~/.bash_profile_からssh-agentを見つけるには、次のようなスクリプトを使用します。

_#!/bin/bash

for P in /tmp/ssh-*/agent.*
do
    if [ -O "$P" ] && [ -O "$(dirname "$P")" ]
    then
        L=$(SSH_AUTH_SOCK="$P" timeout 1s ssh-add -l > >(wc -l))
        case $? in
            0)
                echo "$L $P"
                ;;
            1)
                echo "0 $P"
                ;;
        esac
    fi &
done | sort -rn | if read N P
then
    echo "SSH_AUTH_SOCK='$P'; export SSH_AUTH_SOCK"
else
    ssh-agent
fi
_

これは、このeval $(find-agent)のように_~/.bash_profile_から呼び出すことができます(スクリプトの名前がfind-agentであると仮定します)。

5
kasperd

SshコマンドはエラーメッセージPermission denied (publickey).で失敗する場合がありますが、sshクライアントを誤って構成した場合は、事前に同じキーをエージェントにロードすると機能します。

デフォルトでは、sshssh-addは同じ場所からキーをロードするため、両方が必要なキーを見つけるか、どちらも見つけません。ただし、/etc/ssh/ssh_configおよび~/.ssh/configでは、sshが使用するパスをIdentityFile設定で上書きできます。

~/.ssh/configに誤ったIdentityFile設定が含まれている場合は、投稿に記載されている症状が表示されます。

1
kasperd