「vagrant ssh」でsshエージェント転送を使用するにはどうすればよいですか?


107

迷惑なボックスに新しいSSHキーペアを作成するのではなく、エージェント転送を使用して、ホストマシンにあるキーペアを再利用したいと思います。Vagrantfileでconfig.ssh.forward_agentをTRUEに設定してから、VMを再起動して、以下を使用してみました。

vagrant ssh -- -A

...しかし、gitチェックアウトを実行しようとすると、パスワードの入力を求められます。私が見逃しているものはありますか?


sshキーが適切に設定されていない場合、gitはパスワードを要求しませんが、アクセス権を拒否したことを通知します。git@github.com(ssh)ではなくhttpsからクローンを作成しているため、パスワードの入力を求められていると思います。私の2セント。
alexserver '27 / 10/27

回答:


89

OS X Mountain Lionでvagrant 2を使用しています。

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
  1. config.ssh.private_key_path ローカルの秘密鍵です
  2. 秘密鍵は、ローカルのssh-agentで使用できる必要があります。で確認できます。ssh-add -Lリストにない場合は、ssh-add ~/.ssh/id_rsa
  3. ~/.ssh/authorized_keysVagrant VMに公開鍵を追加することを忘れないでください。あなたはそれをコピー&ペーストするか、ssh-copy-idのようなツールを使用して行うことができます

8
上記の設定後、「vagrant」ユーザーを使用して「git clone」を実行できるが、「root」ユーザーを使用して「git clone」を実行できないことに気付きました。問題と思われるものを知っていますか?おかげで
ナム・グエン

7
config.ssh.private_key_path = "~/.ssh/id_rsa"VagrantがハングアップしWaiting for VM to bootます。
apennebaker 2014年

14
また、浮浪者の怒りの鍵を保持する必要がありますconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin

3
OS Xで、OS Xのキーチェーンに秘密キーを追加したことがわかりましたssh-add -K(同様にconfig.ssh.forward_agent = true)。この回答を見る
Flimm、2015

2
@apennebakerと同じエラーが発生しました。そして、Calinが提案した手順に従っても役に立たなかった...私にとってうまくいったのは、ホストOSからキーチェーンにキーを追加し、config.ssh.private_key_path割り当てを無効にすることでした。
alexserver '27 / 10/27

80

Vagrantfileに追加します

Vagrant::Config.run do |config|
   # stuff
   config.ssh.forward_agent = true
end

ドキュメントを見る


11
基盤となるホストでssh-addを実行し、鍵が復号化されていることを確認してください。
EnabrenTane 2012

1
Windowsはsshキーを転送するために実行する必要があるssh-agentを自動起動しないことに注意してください。このガイドに従って、Windowsでssh-agentの自動起動をセットアップします。
nebffa 2014年

62
この答えはおそらくそれほど多くの票に値しません。OPはそれらconfig.ssh.forward_agentが設定ファイルに追加されたことを明確に述べているので、この回答はどのような新しい情報を提供していますか?リンクも問題になっています。
Trindaz 2014年

7
@Trindazあなたは完全に正しいです。これが私の最も人気のある回答の1つである理由を説明できません。しかし、これは少なくとも52人を助けたと思われるので、私はそれを勝利と呼ぶ必要があります。
EnabrenTane 2014年

1
この答えは確かに新しい情報をもたらすものではありませんが、一方で、Vagrantでプロビジョニングされたマシン用に構成する必要があるのはすべてです。少なくとも、接続しているマシンでエージェント転送が正しく設定されていることを条件とします(つまり、転送は他の非空きマシンでも機能します)。
techraf 2015年

20

"config.ssh.forward_agent = true"をvagrantファイルに追加することに加えて、ホストコンピューターがエージェント転送用にセットアップされていることを確認してください。Githubはこのための優れたガイドを提供します。(トラブルシューティングのセクションをご覧ください)。


7

1.4.3では上記の返信でこれを処理していましたが、1.5では処理を停止しました。ssh-add1.5で完全に動作するように実行する必要があります。

ここでは、次の行をansibleプロビジョニングスクリプトに追加します。 - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

私は私のセットアップの要点も作成しました:https : //gist.github.com/KyleJamesWalker/9538912


私は常に1.4と1.5でssh-addを使用する必要がありました。そうしないと、転送するエージェントが実行されていませんでした
iheggie

5

Windowsを使用している場合、VagrantのSSH転送はデフォルトでは正しく機能しません(net-sshのバグのため)。この特定のVagrantバグレポートを参照してください:https : //github.com/mitchellh/vagrant/issues/1735

ただし、回避策があります!VagrantFileのシンプルなプロビジョニングスクリプトを使用して、ローカルSSHキーをVagrant VMに自動コピーするだけです。次に例を示します。https//github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783


2

最近vagrant-awsVagrant 1.1.5でプラグインを試してみたところ、SSHエージェントの転送で問題が発生しました。VagrantはIdentitiesOnly=yesそれをに変更するオプションなしで強制していることがわかりましたno。これにより、Vagrant VagrantfileはAWSプロバイダー用にリストされた秘密キーのみを参照するように強制されました。

私の経験をブログに書きました。ある時点でプルリクエストになる可能性があります。


2
ホストマシンの基礎となる公開鍵を作成時にVagrant VMに自動コピーする方法はありVagrant upますか?今、私はマシンを作成し、手動でログインして、公開鍵を/home/vagrant/.ssh/authorized_keysに追加する必要があります
Noah

1

VMが独自のSSHエージェントを起動しないことを確認します。私はこの行を私の中に入れました~/.profile

eval `ssh-agent`

それを削除した後、SSHエージェント転送が機能しました。


0

実際の問題は、デフォルトのポートフォワードとして127.0.0.1:2222を使用するVagrantです。1つ追加できます(2222ではなく、2222はデフォルトですでに使用されています)

config.vm.network "forwarded_port"、guest:22、host:2333、host_ip: "0.0.0.0"

「0.0.0.0」は、外部接続からの要求を受け取る方法です。次に、ssh -p 2333 vagrant@192.168.2.101(自分のホストIPアドレスに変更、dud)が正常に機能します。私に感謝してください、ただ私にLeifengと呼んでください!


0

Windowsでは、問題はVagrantがgit-bashのssh-agentと通信する方法を知らないことです。ただし、PuTTYのPageantの使用方法は知っています。したがって、Pageantが実行中でSSHキーが読み込まれている限り、そしてconfig.ssh.forward_agentを設定している限り、これは機能するはずです。

詳細については、このコメントを参照してください。

Pageantを使用している場合、Vagrantfileを更新してWindowsでSSHキーをコピーする回避策は不要になりました。

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