私はSSH鍵生成を使用して公開鍵と秘密鍵を生成しました。公開鍵をアップロードしました。GitLab(基本的にgitハブのレプリカ)私たちの大学システムに鍵を正常にアップロードしたというEメールを受け取りました。 git cloneコマンドを実行しようとすると、次のメッセージが表示されます。
Cloning into 'csci6990-hci-f13'...
ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly
私はgit labシステムを責める前に、私がしっかりしていることを理解しようとしています。しかし、公開鍵をgit labにアップロードするときに、私のMac OS Xで秘密鍵がどこにあるかをgitlabに通知する手順/手順はありません。これにより、sshkeygenがキーをある種の標準リポジトリの場所に自動的に入れることができると思いました。そうですか?そうでない場合は、ファイルシステムがその秘密鍵の場所をリモートシステムに知らせずに公開鍵をアップロードして機能させるにはどうすればよいですか?
編集:これはssh -vvvの出力です。
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to gitlab.cs.uno.edu [137.30.120.92] port 22.
debug1: Connection established.
debug1: identity file /Users/abramhandler/.ssh/id_rsa type -1
debug1: identity file /Users/abramhandler/.ssh/id_rsa-cert type -1
debug1: identity file /Users/abramhandler/.ssh/id_dsa type -1
debug1: identity file /Users/abramhandler/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host
答え1
私のMac OS Xでは、秘密鍵がどこにあるかをgitlabに伝えるための指示/手順はありません。
リモートサーバーは、ローカル秘密鍵がどこにあるかを知る必要はありません。決して見ることができず、見ることもできません。それはあなたのコンピュータに残り、決して転送されません。
これにより、sshkeygenがキーをある種の標準リポジトリの場所に自動的に入れることができると思いました。
(オプションで)独自のキー名を設定するように求められた場合は、デフォルトのファイル名が参照されます/home/you/.ssh/id_rsa
。おそらく秘密鍵でしょう。また、サフィックス付きの公開鍵を生成します.pub
。名前を直接指定すればどこにでも入れることができますが、私が知っている限り、両方のファイルは同じディレクトリになければなりません。
デフォルト名を使用しない場合、キーをssh-agent
使用するには、viaを使用して登録するssh-add
か、sshを呼び出すときにコマンドラインで指定する必要があります。例:
ssh -i ~/.ssh/mykey ....
これはではありませんがmykey.pub
(上記のように)mykey.pub
と同じディレクトリに配置する必要がありますmykey
。すなわち、-i
以下を指す。秘密鍵。キーがパスワードで保護されている場合は、それを入力するように求められます。それからsshに送ってください。公開鍵サーバーに。
指定されたキーを使用しない場合は、-i
その/home/you/.ssh/id_rsa
キーが使用されます(使用可能な場合)。主キーを使用している場合は、残りは無視してかまいません。
デフォルト以外のキーを使用するにはgit
(たとえば、「id_rsa」の選択を解除した場合)、まずssh-agentを使用する必要がありますssh-agent
。 ssh-agentのデフォルトのアイデアは、それを使用してシェルまたは他の永続アプリケーションを呼び出すことです。 gitを呼び出すシェル(たとえば、OSX固有のメソッドを持つことができるGUI自体)。たとえば、
> ssh-agent bash
ssh-agentで新しいbashサブシェルを起動します。次:
> ssh-add ~/.ssh/mykey
繰り返しますが、秘密鍵です。好きなだけ追加できます。後でそのシェルまたはサブシェル内で ssh を使用すると、自動的にリモートサーバーがキーリストを試みます。 Gitを使用した複製:
git clone ssh://me@wherever/some/repo/path
答え2
はい。秘密鍵は、生成した鍵の種類に応じて、~/.ssh/id_rsaまたは~/.ssh/id_dsaになければなりません。ファイル権限が厳格であることを確認してください。
設定をさらに簡素化するために、キーで使用されるパスワードをキャッシュするようにプロキシを設定することもできます。
答え3
SSHポートへの接続を何らかの方法でフィルタリングまたは中断するルータの背後にある可能性はありますか137.30.120.92
?これはサーバーにうまく接続できるからです。
martin@martin ~ % ssh 137.30.120.92
The authenticity of host '137.30.120.92 (137.30.120.92)' can't be established.
ECDSA key fingerprint is 45:45:c0:59:c6:c9:50:22:7d:45:bf:cc:e2:9a:99:31.
+--[ECDSA 256]---+
| .o=@*+o |
| o+o= . |
| .. .|
| . o .|
| S . + |
| . . |
| E . |
| B |
| = |
+-----------------+
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '137.30.120.92' (ECDSA) to the list of known hosts.
Ubuntu 12.04.2 LTS gitlab ssh-pty
Password:
ただし、出力によると、Connection closed by remote host
クライアントssh
は実際にSSHサーバーと通信できません。サーバーは接続を受け入れますが、クライアントには応答しませんssh
。
さらに、関連するメモによれば、Connection closed by remote host
これはサーバーの競合の症状かもしれません。少なくともこのエラーが発生する一般的なシナリオです。しかし、ここではそうではありません。なぜなら、同じエラーが発生するからです。