web-dev-qa-db-ja.com

リモートホストでssh操作をしているときに「キーのパスフレーズを入力してください」という質問が表示されないようにする方法

私はリモートホスト(linux、Fedora)にSSH接続しています。そこでssh操作(bitbucketでgit)をしたいのですが。そのマシン上でssh-agentが実行されています。

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

私がgitしたいときは、パスフレーズを入力する必要があります。

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

注:そのマシンをローカルで操作している場合は、パスフレーズの入力を求められません。

36
lily

私の意見では、sshを使用する最良の方法

Gitを使用する前に、ssh-agentに鍵を追加してください

起動していない場合は、ssh-agentを起動します。

$ eval `ssh-agent -s`

ssh-addを使用して、秘密鍵を追加します。

$ ssh-add〜/ .ssh/id_rsa_key
/home/user/.ssh/id_rsa_keyにパスフレーズを入力してください。
アイデンティティーが追加されました:/home/user/.ssh/id_rsa_key
(/ home/user/.ssh/id_rsa_key)

キーが追加されているかどうかを確認します(パラメーターは小文字のLです)。

$ ssh-add -l
2048 55:96:1a:b1:31:f6:f0:6f:d8:a7:49:1a:e5:4c:94:6f
/home/user/.ssh/id_rsa_key(RSA)

Gitサーバーに接続してみます。

$ ssh git.example.com

追加のパスフレーズを入力せずにGitを使用できるようになりました。

他の方法

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-Prompt

72
Roman

すでにssh-agentが実行されている場合は、キーを追加することができます。パスフレーズを1回入力するだけで済みます。そのセッションに対してのみ1回入力する必要があります。

ssh-add ~/.ssh/id_rsa

どのOSを使用しているかはわかりませんが、LinuxとGnomeの場合は、 "Passwords and Keys"アプリケーション(CLI名:seahorse)で管理できるため、ログイン時にロック解除されます(パスフレーズは不要) )他のLinuxデスクトップ環境には独自のマネージャがあります。私は他のOSがここで何をするのかわからない。

19
ams

パスフレーズを尋ねる主な理由は、あなたの鍵が暗号化されているからです。

  • 暗号化されていません

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • 暗号化

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

したがって、次のいずれかを実行する必要があります。

  1. 暗号化されている場合は、 暗号化を解除することができます
  2. あなたは間違った鍵を使っています。別のキーを使用したい場合は、他のファイルを指定するか、~/.ssh/configを編集して別の識別​​ファイル(IdentityFile)を指定してください。
  3. ssh-add -lを実行してあなたのアイデンティティをすべてリストアップし(そしてあなたのローカルと比較して)、正しいキーを使っているのであればStashで二重チェックしてください(Stashの設定にあります)。
  4. パスフレーズを知っていて自動化したい場合は、次の回避策を試してください。

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

トラブルシューティング:

  1. SSHエージェントが動作していることを再確認してください(eval "$(ssh-agent -s)")。
  2. GIT_TRACE=1 git pullまたはGIT_SSH_COMMAND="ssh -vv"(Git 2.3.0以降)を指定してgitを再実行し、コマンドを再度デバッグします。
  3. あなたはパスフレーズを求めることを迂回しようと試みることができます(それはそれをtrueにリダイレクトするでしょう)、しかし私はそれが助けになるとは思わない。それがそれを要求すれば、それには理由があり、それは基本的に必要とされます。

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
3
kenorb

ssh-addプログラムはあなたのパスフレーズを保持する(そして提供する)ことができるagentを始めます。それをリモートで使用する方法はあなたの対話型シェルのparentの中にあります(エージェントが止まらないように)。

ここにいくつかの関連質問があります:

さて... remoteに​​接続すると、原則としてあなたのコマンドはそのようにはログインしないので、ssh-addは起動しません。これを回避するには、次のスクリプトを実行します。

  • ssh-agentで始まります
  • ssh-addで始まります
  • 鍵を追加します
  • 必要なコマンドを実行します。

弱点は2番目のステップです。あなたが パスフレーズのない鍵を使ってセキュリティを弱める でなければ、stillパスフレーズの入力を促されるでしょう。何人かの人々はこれをします、大部分の人々は反対します。

2
Thomas Dickey

次のコマンドを使用して、自分の鍵のパスフレーズを簡単に削除できます。

ssh-keygen -p

最初のプロンプトで、ファイルパスを入力します(またはデフォルトを変更するにはEnterキーを押します)。2番目のプロンプト、古いパスフレーズを入力します。

これが最も簡単な方法のように見えます!

0
Justin Samuel

秘密鍵がssh-agentにロードされていても、対応するSSH公開鍵がリモートの~/.ssh/authorized_keysに追加されるまで、秘密鍵の復号化を促すパスワードプロンプトが表示されます。

再現するには:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password Prompt for private key
  #       (and only then Prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

十分に混乱します。この場合、リモートSSHログインパスワードで十分です。

これにより、対応する秘密鍵の暗号化パスワードを知らなくても、(暗号化された秘密鍵とペアになっている)あなたの公開鍵を追加できなくなると推測できます。とにかく1回のリモートログイン手続きです。

0
uvsmtid