1044

複数の秘密鍵を使用して、異なるサーバーまたは同じサーバーの異なる部分に接続したい(私の用途は、サーバーのシステム管理、Gitの管理、および同じサーバー内での通常のGitの使用です)。id_rsaファイル内のキーを単純にスタックしてみましたが、役に立ちませんでした。

どうやらこれを行う簡単な方法は、コマンドを使用することです

ssh -i <key location> login@server.example.com 

それはかなり面倒です。

これを少し簡単にする方法について何か提案はありますか?

4

21 に答える 21

1449

私から.ssh/config

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

次に、以下を使用して接続できます。

ssh myshortname

ssh myother

等々。

于 2010-03-10T18:46:39.323 に答える
504

接続時に複数のキーを連続して試すようにsshに指示できます。方法は次のとおりです。

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

このように、どのキーがどのサーバーで機能するかを指定する必要はありません。最初に機能するキーを使用するだけです。

また、特定のサーバーがキーを受け入れる意思がある場合にのみ、パスフレーズを入力します。上で見たように、sshはパスワードを持っていてもパスワードを要求しようとしませんでした.ssh/id_rsa

確かに、他の回答のようにサーバーごとの構成を上回ることはありませんが、少なくとも、接続するすべてのサーバーの構成を追加する必要はありません。

于 2015-10-20T04:56:48.350 に答える
272

ランダル・シュワルツからの回答は、ほとんど私を助けてくれました。サーバー上で別のユーザー名を使用しているため、ファイルにUserキーワードを追加する必要がありました。

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

これで、フレンドリ名を使用して接続できます。

ssh friendly-name

その他のキーワードは、OpenSSHのmanページにあります。注:リストされているキーワードの一部は、/ etc / ssh/ssh_configファイルにすでに存在している可能性があります。

于 2010-09-30T07:37:27.357 に答える
220

これまでの回答では、複数のsshキーを管理するための構成ファイルを作成する方法を適切に説明しています。また、説明が必要な重要なことは、リポジトリのクローンを作成するときにホスト名をエイリアス名に置き換えることだと思います。

会社のGitHubアカウントのユーザー名がabc1234であるとします。そして、個人のGitHubアカウントのユーザー名がjack1234であるとします。

また、2つのRSAキー、つまりid_rsa_companyid_rsa_personalを作成したとします。したがって、構成ファイルは次のようになります。

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

これで、会社のGitHubアカウントからリポジトリ (demoという名前)のクローンを作成すると、リポジトリのURLは次のようになります。

Repo URL: git@github.com:abc1234/demo.git

ここで、実行中git cloneに、上記のリポジトリURLを次のように変更する必要があります。

git@company:abc1234/demo.git

構成ファイルで定義したように、github.comがエイリアス「company」に置き換えられていることに注目してください。

同様に、構成ファイルで提供されているエイリアスに応じて、個人アカウントのリポジトリのクローンURLを変更する必要があります。

于 2016-07-19T09:06:09.927 に答える
116
ssh-add ~/.ssh/xxx_id_rsa

追加する前に、必ずテストしてください。

ssh -i ~/.ssh/xxx_id_rsa username@example.com

エラーに問題がある場合は、ファイルのセキュリティを変更すると役立つことがあります。

chmod 0600 ~/.ssh/xxx_id_rsa
于 2010-08-15T05:31:57.530 に答える
67
  1. SSHキーを生成します。

     $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. 別のSSHキーを生成します:

     $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
    

    これで、2つの公開鍵(id_rsa.pubaccountB.pub~/.ssh/ )がディレクトリに存在するはずです。

     $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory
    
  3. ~/.ssh/config次の内容で構成ファイルを作成します。

     $ nano ~/.ssh/config
    
     Host bitbucket.org
         User git
         Hostname bitbucket.org
         PreferredAuthentications publickey
         IdentityFile ~/.ssh/id_rsa
    
     Host bitbucket-accountB
         User git
         Hostname bitbucket.org
         PreferredAuthentications publickey
         IdentitiesOnly yes
         IdentityFile ~/.ssh/accountB
    
  4. アカウントからクローンを作成しdefaultます。

     $ git clone git@bitbucket.org:username/project.git
    
  5. アカウントからクローンを作成しaccountBます。

     $ git clone git@bitbucket-accountB:username/project.git
    

注:ディレクティブがあるため、リポジトリURLUser gitの一部を省略して、次のようにコマンドを短縮できます。git@clone

    $ git clone bitbucket-accountB:username/project.git

これがそのディレクティブの唯一の目的です。必要ない場合(たとえば、常にWebサイトからgit cloneコマンドをコピーして貼り付ける)、構成から除外することができます。

詳細はこちら

于 2016-12-14T05:39:48.600 に答える
28

ssh-agentの使用についてTuomasに同意します。また、作業用に2つ目の秘密鍵を追加したかったので、このチュートリアルは私にとって魅力的なものでした。

手順は次のとおりです。

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key例えばssh-add ~/.ssh/id_rsa
  3. 確認方法$ ssh-add -l
  4. $ssh -v <host url>たとえばでそれをテストしますssh -v git@assembla.com
于 2014-10-21T09:30:54.890 に答える
22

最近のバージョンのGitでは、リポジトリ固有のGit構成ファイルでsshCommandを指定できます。

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user
   [remote "origin"]
      url = git@bitbucket.org:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*
于 2018-08-19T14:29:18.223 に答える
17

しばらく前にこの問題が発生しました。2つのBitbucketアカウントがあり、両方に別々のSSHキーを保存する必要がありました。これは私のために働いたものです。

次のように2つの別々のssh構成を作成しました。

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

仕事用アカウントからリポジトリのクローンを作成する必要があったとき、コマンドは次のようになりました。

git clone git@bitbucket.org:teamname/project.git

このコマンドを次のように変更する必要がありました。

git clone git@**work**.bitbucket.org:teamname/project.git

同様に、私の個人アカウントからのクローンコマンドを次のように変更する必要がありました

git clone git @ personal .bitbucket.org:name / personalproject.git

詳細については、このリンクを参照してください。

于 2016-09-02T06:58:08.040 に答える
9

キーにはssh-agentを使用します。

于 2010-03-10T18:44:02.990 に答える
9

私にとって、唯一の有効な解決策は、これをファイルに追加することでした~/.ssh/config

Host *
  IdentityFile ~/.ssh/your_ssh_key
  IdentityFile ~/.ssh/your_ssh_key2
  IdentityFile ~/.ssh/your_ssh_key3
  AddKeysToAgent yes

your_ssh_key拡張子はありません。使用しないでください.pub

于 2020-05-25T13:09:07.890 に答える
8

これが私がsajib-khanの答えから着想を得て使用した解決策です。デフォルトの構成は設定されていません。これはGitLabの個人アカウントであり、他に指定されているのは私の会社アカウントです。これが私がしたことです:

SSHキーを生成します

ssh-keygen -t rsa -f ~/.ssh/company -C "name.surname@company.com"

SSH構成を編集します

nano ~/.ssh/config
    Host company.gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/company

キャッシュされたSSHキーを削除します

ssh-add -D

試して!

ssh -T git@company.gitlab.com

GitLab、@ hugo.sohmへようこそ!

ssh -T git@gitlab.com

GitLab、@ HugoSohmへようこそ!

これを使って!

会社のアカウント

git clone git@company.gitlab.com:group/project.git

個人/デフォルトアカウント

git clone git@gitlab.com:username/project.git

これが私が使用したソースです。

于 2020-04-28T09:20:19.637 に答える
2

configフォルダに名前の付いた構成ファイルを作成でき~/.sshます。次のものを含めることができます。

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

これにより、このようなマシンに接続できるようになります

 ssh aws
于 2016-01-18T00:27:32.123 に答える
2

GitHubの複数のキーペア

1.0SSH構成ファイル

1.1〜/ .ssh/configを作成します

1.2 chmod 600〜/ .ssh / config(必須

1.3ファイルに以下を入力します。

ホストピザ

HostName github.com

PreferredAuthentications publickey#オプション

IdentityFile〜/ .ssh / privatekey1

ケースA:新しいGitクローン

次のコマンドを使用してクローンをGitします。

$ git clone git@pizza:yourgitusername/pizzahut_repo.git

注:将来、.ssh / configのホスト名「pizza」を変更する場合は、Git clonedフォルダーに移動し、.git / configファイルのURL行を編集します(ケースBを参照)。

ケースB:すでにGitクローンフォルダーがあります

2.1クローンフォルダーに移動し、次に.gitフォルダーに移動します

2.2構成ファイルの編集

2.3URLを*oldからnewに更新します:

(Old) URL = git@github.com:yourgitusername/pizzahut_repo.git

(New) URL = git@pizza:yourgitusername/pizzahut_repo.git

于 2020-01-08T13:16:42.067 に答える
2

を使用している場合は、EC2InstanceConnectを使用することを強くお勧めします。

Amazon EC2 Instance Connectは、Secure Shell(SSH)を使用してインスタンスに接続するためのシンプルで安全な方法を提供します。

EC2 Instance Connectでは、AWS Identity and Access Management(IAM)のポリシーと原則を使用して、インスタンスへのSSHアクセスを制御し、SSHキーを共有および管理する必要をなくします。

関連するパッケージをインストールした後(またはリポジトリを直接pip install ec2instanceconnectcli複製した後) 、インスタンスIDを変更するだけで、複数のEC2インスタンスに非常に簡単に接続できます

ここに画像の説明を入力してください


舞台裏で何が起こっているのですか?

EC2 Instance Connectを使用してインスタンスに接続すると、Instance Connect APIは、1回限りのSSH公開鍵をインスタンスメタデータにプッシュし、60秒間保持します。IAMユーザーに付加されたIAMポリシーは、IAMユーザーが公開鍵をインスタンスメタデータにプッシュすることを許可します。

SSHデーモンは、Instance Connectのインストール時に構成されたAuthorizedKeysCommandとAuthorizedKeysCommandUserを使用して、認証のためにインスタンスメタデータから公開鍵を検索し、インスタンスに接続します。

(*)Amazon Linux 22.0.20190618以降およびUbuntu20.04以降には、EC2InstanceConnectが事前構成されています。サポートされている他のLinuxディストリビューションの場合、InstanceConnectの使用をサポートするすべてのインスタンスに対してInstanceConnectを設定する必要があります。これは、インスタンスごとに1回限りの要件です。


リンク:


EC2InstanceConnectを使用してEC2InstanceConnectConnectをセットアップするAmazonEC2InstanceConnectを使用し
て要塞ホストを保護する


于 2020-10-16T12:58:54.960 に答える
1

重要:ssh-agentを起動する必要があります

次のようにssh-addを使用する前に、ssh-agentを起動する必要があります(まだ実行されていない場合)。

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # Where id_rsa_2 is your new private key file

evalコマンドは、WindowsのGitBashでエージェントを起動することに注意してください。他の環境では、バリアントを使用してSSHエージェントを起動する場合があります。

于 2017-07-27T10:31:26.730 に答える
1

Atlassianのブログページで説明されているように、 .sshフォルダー内に次のテキストを含む構成ファイルを生成します。

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

次に、サフィックスドメインを使用してチェックアウトするだけで、プロジェクト内で作成者名などをローカルで構成できます。

于 2019-03-28T15:59:23.783 に答える
1

Ubuntu 18.04(Bionic Beaver)では、何もする必要はありません。

2番目のSSHキーを正常に作成した後、システムは各接続に一致するSSHキーを見つけようとします。

明確にするために、次のコマンドを使用して新しいキーを作成できます。

# Generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen

# Make sure ssh agent is running
eval `ssh-agent`

# Add the new key
ssh-add ~/.ssh/id_rsa_server2

# Get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
于 2019-07-09T04:44:32.553 に答える
1

ファイル〜/ .ssh/configに以下を設定するアプローチが大好きです。

# Configuration for GitHub to support multiple GitHub  keys
Host  github.com
  HostName github.com
  User git

# UseKeychain adds each keys passphrase to the keychain so you
# don't have to enter the passphrase each time.
  UseKeychain yes

# AddKeysToAgent would add the key to the agent whenever it is
# used, which might lead to debugging confusion since then
# sometimes the one repository works and sometimes the
# other depending on which key is used first.
#  AddKeysToAgent yes

# I only use my private id file so all private
# repositories don't need the environment variable
# `GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa"` to be set.
  IdentityFile ~/.ssh/id_rsa

次に、リポジトリに、使用するコマンドを.env含むファイルを作成できます。ssh

GIT_SSH_COMMAND="ssh -i ~/.ssh/your_ssh_key"

次に、たとえばdotenvを使用すると、環境環境変数が自動的にエクスポートされ、whoop whoopを使用して、プロジェクト/ディレクトリごとに必要なキーを指定できます。パスフレーズはキーチェーンに追加されるため、一度だけ要求されます。

このソリューションはGitと完全に連携し、Macで動作するように設計されています(によるUseKeychain)。

于 2020-05-12T15:23:31.943 に答える
0

OpenSSH_5.3p1およびOpenSSL1.0.1e -fipsを実行しているCentOS6.5で、キーファイルの名前を変更して、デフォルト名がないようにすることで問題を解決しました。

私の.sshディレクトリにはid_rsa_fooとid_rsa_barが含まれていますが、id_rsaなどは含まれていません。

于 2017-03-16T21:07:23.440 に答える
-1

このsshmultinpmパッケージを試して、複数のSSHキーを維持できます。

于 2020-03-04T16:18:24.197 に答える