ssh-agentとssh-addがリモートサーバー上で動作することを許可できません

ssh-agentとssh-addがリモートサーバー上で動作することを許可できません

ソフトウェアの特定の部分を構築するリモートサーバーがあります。ビルドプロセスの一部では、プライベートbitbucketリポジトリへのアクセスが必要です。

eval $(ssh-agent)通常、私のローカルマシンでは、gitがsshを使用してbitbucketに接続し、sshエージェントを起動し、gitを使用してssh-add必要なキーを追加するように.gitconfigを設定すると正常に動作します。

リモートサーバーで動作させることはできません。
私が試す方法は、リモートサーバーに接続して次のスクリプトを実行することです。

  ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << EOF
     eval $(ssh-agent)
     ssh-add ~/route/to/key
     ... rest of build script ...
     
  EOF

試行すると、エージェントがエージェントpidで始まったが、ssh-add次のエラーで失敗するという出力が表示されます。エージェントへの接続中にエラーが発生しました。そのファイルまたはディレクトリはありません。これは、プロキシソケットにアクセスできないことを示します(私が正しく理解した場合)。

ここで何の問題がありますか?私はこの種の設定に初めて触れますので、基本まで躊躇しないでください。

ベストアンサー1

短い答え:リモコンにキーがあるのにチェックマークを忘れてしまったり'EOF' 、ロケールにキーがありますが、これがキーをリモコンに転送する方法であることを望まない場合があります。 2番目のケースでは、scp -pキーをリモコンに送信したり、他のセキュリティ手段(例:離れてbitbucketの公開IDキー(作成したと仮定)

長い答え:

入力し、ssh-agentここで何が起こっているかを確認してください。

(または

cat  << EOF
     echo Would do remotely   eval $(ssh-agent)
     echo Would do remotely   ssh-add ~/route/to/key
     echo -------------
EOF

または

ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << EOF
     echo WOULD DO   eval $(ssh-agent)
     echo WOULD DO   ssh-add ~/route/to/key
EOF

私が無駄な話もならない言葉をしていると感じたら。 )

出力には次の内容が含まれます。

SSH_AUTH_SOCK=/tmp/ssh-XXXXXXEEUQSV/agent.43806

これはローカルコンピュータ上のssh-agentのUnixドメインソケットアドレスです。これはお使いのコンピュータにローカルであり、リモートコンピュータには存在しません(希望しています!)。

そのソケットファイルは両方のシステムには存在しません。たぶんあなたは文章を書きたいと思うかもしれません

#  Note  ' ' on the following line -----------------here-------------\--\
ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << 'EOF'
     eval $(ssh-agent)
     ssh-add ~/route/to/key
     ... rest of build script ...
EOF

~/route/to/keyリモートコンピュータで動作している場合。

コメント。自分が何をしているのかを知っている場合は、次のことを試すこともできます。ssh-agent bash -c 'ssh-add ~/route/to/key; ssh -A -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}"'

修正する:コメントは、cat <<EOFvsがcat <<'EOF'問題を部分的に解決したことを示します。人々は一時ファイルを生成してより多くの制御を得ることができます

echo 'echo This will expanded on remote: $VAR $(hostname; ls file) ' > file.$$
echo "echo This will be expanded locally: $VAR $(hostname; ls -l file) ' >> file.SS
echo "ls -l /dir/file # This list the remote file anyway " >> file.$$
ssh ....  < file.$$

あるいは、バックスラッシュエスケープを使用することもできます。

ssh ....  <<EOF
echo This will expanded on remote: \$VAR \$(hostname; ls file)
echo This will be expanded locally: $VAR $(hostname; ls file)
ls -l /dir/file # This list the remote file anyway
EOF

(未検証)

おすすめ記事