それで、私にはホストがあり、それをrob
と呼びます。 rob
でssh-keygenを使用して公開鍵を取得しました。これは、リポジトリcheech
の新しいデプロイキーの追加画面でgithubに提供しました。次に、chong
もrob
にデプロイしたいと思います。しかし、githubのリポジトリchong
の新しいデプロイキーの追加画面に移動し、rob
で生成した公開キーを貼り付けると、key already in use
。それらのキーが使用されている場合、chong
をrob
に複製できると思いましたが、それは許可が拒否されたことを示しています。
明らかに、これは思ったよりも複雑で、複数のキーなどがあることを意味します。 chong
でrob
のクローンを作成するにはどうすればよいですか?
ご協力ありがとうございました。
あるキーがデプロイキーとして1つのリポジトリにアタッチされると、そのキーを別のリポジトリで使用することはできません。デプロイキーの設定中にこのエラーが発生した場合は、リモートを変更し、~/.ssh/config
ファイルを設定して存在しないgithub.comホスト名。sshはリポジトリの正しいsshデプロイキーを選択するために使用できます。
# first we remove the Origin
$ git remote -v
Origin [email protected]:username/foo.git (fetch)
Origin [email protected]:username/foo.git (Push)
$ git remote rm Origin
# here we add a new Origin using a Host nickname called
# foo.github.com that we will reference with a Host stanza in our
# ~/.ssh/config to specify which key to use with which fake hostname.
$ git remote add Origin [email protected]:username/foo.git
$ git remote -v
Origin [email protected]:username/foo.git (fetch)
Origin [email protected]:username/foo.git (Push)
リポジトリのデプロイキーを生成し、次のような適切な名前を付けます。
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/username/.ssh/id_rsa-foo.
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub.
The key fingerprint is:
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo
The key's randomart image is:
+--[ RSA 2048]----+
| E o..o.oo. |
| M o o o .+CoW |
| + o = o. .. |
| . . + |
| S |
| o . |
| + |
| . o |
| ..o. |
+-----------------+
デプロイキーを追加 したら、次のスタンザを~/.ssh/config
ファイルに追加する必要があります。
Host fake-hostname-foo.github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa-foo
これでテストできます:
$ ssh -T [email protected]
Hi username! You've successfully authenticated, but GitHub
does not provide Shell access.
私が見つけた最も簡単な解決策は概説されました ここ 。
1)次のコマンドを入力します(必要な数のキーに対してこれを実行します):
ssh-keygen -t rsa -C "[email protected]"
2)以下のステートメントでプロンプトが表示されたら、一意の名前(つまり、foo1_rsa)を入力します。ファイルは現在のディレクトリに作成され、整頓したい場合は.sshに移動する必要がある場合があります。
キーを保存するファイルを入力してください(/Users/you/.ssh/id_rsa):[Enterキーを押します]
3)SSH構成ファイルを更新します。
vi〜/ .ssh/config
空の可能性があります:
Host cheech github.com
Hostname github.com
IdentityFile ~/.ssh/foo1_rsa
Host chong github.com
Hostname github.com
IdentityFile ~/.ssh/foo2_rsa
Githubのデプロイキーは一意です...他のリポジトリの新しいキーを生成する必要があります。もう一度ssh-keygenを実行してください
これについてはgithubのドキュメントを参照してください: https://help.github.com/articles/managing-deploy-keys
GitHubアカウントのすべてのプライベートリポジトリへのrob
アクセスを許可する場合は、cheech
からデプロイキーとしてキーを削除し、SSHキーとして追加できます。 GitHubアカウント全体。これにより、rob
にcheech
とchong
の両方へのアクセス権が付与されます。
アカウントにrob
にアクセスさせたくない他のリポジトリがある場合、これは機能しません。
より細かい制御が必要な場合は、rob
に追加のキーを生成し、それらを特定のリポジトリーへのデプロイキーとして割り当てる必要があります。
私はこれが5歳以上であることを知っていますが、この人気のある質問に対する回答は受け入れられていないため、清潔さと将来の読みやすさを考慮した最善の方法を以下に示します:
導入ユーザーをチームに追加します
ステップ1:新しいdeployユーザーの組織のドメインに新しいメールアドレスを作成します。 [email protected]のようなもの。
ステップ2:そのメールボックスを使用して新しいGitHubアカウントを作成します( GitHubがこれらの「マシンユーザー」を呼び出します )ユーザー名を指定しますdeploy-ExampleOrganisationのように、その役割は明確です。
ステップ3:次のようなコマンドを使用して、サーバーに "deploy"というユーザーを作成します。
useradd -d /home/deploy -m deploy
パスフレーズを指定せず、/ home/deploy/.ssh/id_rsaをファイルの場所として指定して、deploy @ servernameのSSHキーを生成します:
ssh-keygen -t rsa -b 4096 -C "deploy@servername"
/ home/deploy/.ssh/id_rsa.pubのコンテンツを新しいdeploy-ExampleOrganisationGitHubにSSHキーとして追加しますアカウント:設定> SSHおよびGPGキー>新しいSSHキーに移動します。
ステップ4: "Read-only deploy users"、新しいユーザーをチームに追加し、展開するすべてのリポジトリへの読み取りアクセス権をチームに付与します。 (組織アカウントを持っていない場合でも、このユーザーに複数のプライベートリポジトリへのアクセス権を与えることができます)
ステップ5:独自のパーソナルマシンのSSHキーを追加して、ユーザーの承認済みキーファイルをデプロイします(/ home/deploy/.ssh/authorized_keys)コードをデプロイするときに、ユーザー(またはデプロイスクリプト)がdeployとしてログインできるようにします。
ブーム!それだけです...これで、クリーンで自己文書化されたフローが完成しました。
P.S。私はaculichの非常に高い投票の答えを試しましたが、偽のホスト名をいじくりまわしていたので、数年後にこれに戻ってきたら、すべてのキーを作成する方法を簡単に理解して、その方法を理解できると思いましたそのSSH構成ファイルは、これらの面白い存在しないリモートアドレスを機能させますか?おそらくそうではありません!
偽のホスト名メソッドに対するデプロイユーザーの利点:
ls -la
に誘導される何年も前にこれを行った方法を忘れた場合、SSHキーによりGitHubアカウント名ssh -T [email protected]
に誘導され、うまくいけば、完全に再びスピードアップ。Pimkinのアイデアは素晴らしかったが、node
をこれだけのためにインストールしたくなかったので、bash
に同様のものを作成しました。
https://Gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9
インストールして使用:
curl https://Gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone
chmod +x /usr/local/bin/gh-deploy-clone
gh-deploy-clone user/repo
# You can also give it a name, in case
# you have multiple deploy targets:
gh-deploy-clone user/repo staging
小さなnpm
モジュール github-add-key を使用すると、複数のGitHubデプロイキーの管理が簡単になります。 this で説明されているアプローチを使用しているため、必要なのは
$ github-add-key rob/chong
ローカルでクローンされたrob/chong
と簡単な自動化プロセスに従ってください。
ここでは良い答えや簡単な答えは見たことがなかったので、自分の解決策を投入すると思いました。ドメイン名を変更したり、ラッパースクリプトを使用したり、キーリングをねじ込んだり、.ssh設定ファイルをいじったりする必要がある場合、私は答えが好きではありません。 SSHはgitのトランスポートにすぎないので、重要なsshフォルダーと構成をハックと設定でいっぱいにして、一度設定したら気にせず、リポジトリごとに1つしか持たない複数のデプロイキーを使用したくありません。これはgit configである必要があります-そうです。
さらに、資格情報をリポジトリの.gitフォルダーに保存しないでください。リポジトリフォルダーを削除すると、デプロイキーが削除されます。
/ tmp/deploy_keyがプライベートデプロイキーの初期(一時)ロケーションであると想定します。
# Initial clone of repo
GIT_SSH_COMMAND="ssh -i /tmp/deploy_key" git clone [email protected]:folder/reponame.git
# cd to the folder to assure we only change config for the repo instead of user/global.
cd reponame
# Could probably just mv instead of cp/chmod/rm the key but lets be precise
cp /tmp/deploy_key ./.git/deploy_key
chmod 600 ./.git/deploy_key
rm /tmp/deploy_key
# This is the magic - note the backslash escaping the $ as PWD is always the repo's
# folder when pulling or pushing etc... and at git (run) command time $PWD is the
# repo's root folder.
git config core.sshCommand "ssh -i \$PWD/.git/deploy_key"
もちろん、キーを別の場所に保存し、$ PWDなしの絶対パスをデプロイキーに使用することもできます。
# Initial clone of repo
GIT_SSH_COMMAND="ssh -i /path/to/a/deploy_key" git clone [email protected]:folder/reponame.git
# cd to repo to configure only for this repo
cd reponame
git config core.sshCommand "ssh -i /path/to/a/deploy_key"
しかし、私はそれをリポジトリの内部.gitフォルダーに保持することを好むので、リポジトリのフォルダーを削除した場合、保持されている認証情報がないことがわかり、結局、デプロイキーごとに1つのリポジトリしか持てません。
Sshラッパーを作成してGIT_SSH
として渡すこともできます。このオプションには、gitリモートを変更する必要がないという利点があります。 https://stackoverflow.com/a/14221028/3461