SSH経由で自分のサーバーにログインすると、SSH経由でgit(プライベートストア)を使用できます。
user@local:~$ ssh example.com
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 2.6.32-042stab083.2 i686)
* Documentation: https://help.ubuntu.com/
Last login: Thu Oct 30 10:46:22 2014 from 123.123.123.123
user@remote:~$ cd ~/path/to/project/
user@remote:~/path/to/project$ git pull
Enter passphrase for key '/home/user/.ssh/id_rsa':
Already up-to-date.
user@remote:~/path/to/project$ ps -aux | grep ssh-agent
user 450 0.0 0.0 4396 832 pts/4 S+ 10:57 0:00 grep ssh-agent
user 32680 0.0 0.0 4168 696 ? Ss 10:50 0:00 ssh-agent
user@remote:~/path/to/project$
ssh-add
ただし、別のセッションでもssh-agentを使用してキーを追加したため、パスワードを入力する必要があることに注意してください。 ssh-agentは上記のように実行中です。パスワードを再入力しなくてもSSHキーを使用できると思いました。私が間違っています。
私が使用する展開スクリプトには、リポジトリの複製またはインポート(プロジェクトによって異なります)が含まれているため、CIサーバーで次のように実行します。
ssh [email protected] '~/path/to/deployment/script.sh'
その結果、「権限が拒否されました(公開キー)」というメッセージが表示されます。鍵のロックを解除するにはパスワードが必要ですが、パスワードが指定されていないため、エラーが発生しました。
パスワードなしでSSHキーを作成する以外に、この問題を解決する他の方法はありますか?
答え1
ssh-agent
に接続するには、ssh
クライアント(または他のプロセス)が接続方法を知っている必要があります。この情報はssh-agent
起動時にシェルコマンドによって発行されます。通常は次のようになります。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-H8yPWdYCNFmT/agent.506989; export SSH_AUTH_SOCK;
SSH_AGENT_PID=506990; export SSH_AGENT_PID;
echo Agent pid 506990;
生成アプリケーションは通常、これらのコマンドを評価して現在のプロセス環境に変数をロードし、すべての子プロセスに伝播します。
したがって、正しいプロセスに接続するには、適切なソケットを見つける必要がありますssh-agent
(たとえば、1人のユーザーでも同時に複数のエージェントを実行できます)。これを行う方法は2つあります。
問題のあるエージェントのPIDを確認し、すべてのディレクトリ
/tmp/ssh-*
でソケットを検索します。最近最も低いPID(ssh-agent
フォークがデーモンになるため、ソケット名に使用されるPIDは実際のデーモンのPIDよりも低くなります。)問題のエージェントを生成したプログラムがまだ実行されている場合(またはその子孫の1つが実行されている場合)、その環境から情報を抽出できます。
$ strings /proc/<PID>/environ | grep SSH_
常にどのソケットを使用するかを知らせるエージェントを起動します。
$ ssh-agent -a /path/to/ssh_agent/socket
たとえば、ローカルコンピュータとリモートコンピュータで作業するときに便利です。これをシェル初期化スクリプトに直接接続し、デスクトップ環境でエージェントを作成したコンピュータに接続するときにJust loadにアクセスするだけです。すべての鍵。端末マルチプレクサなどを使用する場合も同様です。