リモートホストでssh操作をしているときに「キーのパスフレーズを入力してください」という質問を避ける方法は?


44

リモートホスト(linux、fedora)にsshしているので、そこでssh操作(git with bitbucket)を行いたいです。そのマシン上で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': 

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


1
私はそれを使用していませんが、そのようなことのために使用されると思うコマンドssh-addがあります
-barlop

回答:


81

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

Gitを使用する前に、キーをssh-agentに追加します

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

$ eval `ssh-agent -s`

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

$ ssh-add〜/ .ssh / id_rsa_key
/home/user/.ssh/id_rsa_keyのパスフレーズを入力:
追加されたID:/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


しかし、私はGitを使用してキーをssh-agentに追加しました。おかげで
リリー

@lilyごめんなさい、あなたの質問がわかりません。
ローマン

1
これは私のために働いた解決策です。
スカトックス

2
これを永続化するにはどうすればよいですか?単にそれを入れて.bashrc
オアフィッシュ

1
参考までに、これevalは必要なSSH_AUTH_SOCKなどの環境変数をエクスポートするコマンドを出力するために必要です。unix.stackexchange.com/questions/351725/...
wisbucky

21

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

ssh-add ~/.ssh/id_rsa

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


3

パスフレーズを要求する主な理由は、キーが暗号化されていることです。次の2つを比較してください。

  • 暗号化されていません

    $ 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を指定するか、編集して別のIDファイル(IdentityFile)を指定します。
  3. 実行ssh-add -lしてすべてのIDをリストし(ローカルと比較)、正しいキーを使用している場合は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を再実行します:GIT_TRACE=1 git pullまたはGIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+)でコマンドを再度デバッグします。
  3. パスフレーズ(これをにリダイレクトしますtrue)を要求することをバイパスすることはできますが、私はそれが役に立たないと思います。それを要求する場合、その理由があり、基本的に必要です。

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

ssh-addプログラムが起動し、エージェントパスフレーズを保持(および提供)することができます。リモートで使用する方法は、対話型シェルの親にあります(エージェントが停止しないようにするため)。

関連するいくつかの質問を次に示します。

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

  • 始まる ssh-agent
  • 始まる ssh-add
  • キーを追加します
  • 必要なコマンドを実行します。

弱点は、2番目のステップです:あなたはでしょうそれでもあなたがない限り、パスフレーズの入力を求められますパスフレーズを持っていないキーを使用して、セキュリティを弱めます。これを行う人もいますが、ほとんどの人は反対します。


ssh-addエージェントを開始しません。すでに実行中のエージェントに接続します。
AMS

ありがとう-私はこれらを別々のスクリプトで行うことに慣れていて、欠けている部分を見落としていました。
トーマスディッキー

0

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

ssh-keygen -p

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

これが最も簡単な方法のようです!


0

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回の手順です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.