当有两台或以上云服务器的时候,每次登录都要

  1. $ ssh <user>@<hostname> [-p ...]
  2. password: ******

这样会造成很多不必要的麻烦——每次都要输入用户和密码,于是我们通过配置ssh-key来认证服务器。

使用ssh-keygen生成ssh-key密钥对

  1. $ ssh-keygen

一路回车即可

使用ssh-copy-id

ssh-copy-id可以将上面生成的ssh-key复制到服务器,具体用法如下

  1. $ ssh-copy-id -i <identity_file> <user>@<hostname>
  2. password: ******

在执行完成后就可以直接访问服务器而免去了输入密码的烦恼。

使用ssh-config

虽然免去了输入密码的烦恼,但我们每次还是要输入user和hostname,我们可以通过配置一个config文件来达到更简单的目的。

编辑文件

  1. $ vim ~/.ssh/config
  1. Host aliyun
  2. HostName ***.***.***.***
  3. IdentityFile ~/.ssh/id_rsa
  4. user root

其中Host是别名,HostName是服务器地址,IdentityFile是私钥文件,user是要登录的用户。
于是只需要

  1. $ ssh aliyun

就可以直接连接到服务器了。

github使用多个私钥

虽然推荐一个用户只拥有一对密钥,但有时也会出现一台机器上有多个github用户的时候,如果不配置,默认就是用~/.ssh/id_rsa这个私钥,如果不区分,就可能没有权限push到指定的仓库。

比如,现在有2个github用户,每个用户有一个仓库,并且有两对ssh-key,两把ssh-key的公钥都已经放在了github相应的账户中。

编辑config文件

  1. $ vim ~/.ssh/config
  1. Host user1
  2. HostName github.com
  3. IdentityFile ~/.ssh/key1
  4. user user1
  5. Host user2
  6. HostName github.com
  7. IdentityFile ~/.ssh/key2
  8. user user2

此时的Host任意命名即可,看到,虽然我们配置了两个HostName都是github.com,但是它们对应不同的user。

使用时,在github的remote url中,指定相应用户即可。

例如

  1. git@github.com:user1/project1