SSHコマンドによるgit pullの使用

SSHコマンドによるgit pullの使用

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つあります。

  1. 問題のあるエージェントのPIDを確認し、すべてのディレクトリ/tmp/ssh-*でソケットを検索します。最近最も低いPID(ssh-agentフォークがデーモンになるため、ソケット名に使用されるPIDは実際のデーモンのPIDよりも低くなります。)

    問題のエージェントを生成したプログラムがまだ実行されている場合(またはその子孫の1つが実行されている場合)、その環境から情報を抽出できます。

    $ strings /proc/<PID>/environ | grep SSH_
    
  2. 常にどのソケットを使用するかを知らせるエージェントを起動します。

    $ ssh-agent -a /path/to/ssh_agent/socket
    

    たとえば、ローカルコンピュータとリモートコンピュータで作業するときに便利です。これをシェル初期化スクリプトに直接接続し、デスクトップ環境でエージェントを作成したコンピュータに接続するときにJust loadにアクセスするだけです。すべての鍵。端末マルチプレクサなどを使用する場合も同様です。

関連情報