ソフトウェアの特定の部分を構築するリモートサーバーがあります。ビルドプロセスの一部では、プライベート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 <<EOF
vsが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
(未検証)