SSH key 就是为了让两个linux机器之间不需要用户名和密码就能建立安全的加密连接的一对rsa或dsa签名的密钥对。SSH key 对权限有着非常严格的限制。登录端的 .ssh目录权限是ssh-keygen自己生成的不要乱改。默认.ssh目录是700 , id_rsa 是600,不能给其他用户写的权限,否则服务器会认为这个文件不可靠,可能被改写而拒绝登录。被登录的机器 .ssh 目录是 700,至少不能有写的权限,id_rsa.pub的权限是644。
你可以按如下命令来生成sshkey,ssh-keygen 命令的参数 -t 表示密钥的类型,如果没有指定则默认生成用于SSH-2的RSA密钥。参数 -C 表示识别这个密钥的注释:
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Creates a new ssh key using the provided email
$ Generating public/private rsa key pair.
$ Enter file in which to save the key (/root/.ssh/id_rsa): 直接回车,此处如果想重命名可输入新的命名
$ Enter passphrase (empty for no passphrase): 直接回车
$ Enter same passphrase again:
$ Your identification has been saved in /root/.ssh/id_rsa. 公钥
$ Your public key has been saved in /root/.ssh/id_rsa.pub. 私钥
查看你的public key,并把他添加到远程服务器上。
$ cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
以Git@OSC为例,添加后,在终端(Terminal)中输入一下命令(SSH 默认使用 22 端口,如果端口号非默认,后面加上 -p 端口号
即可。
$ ssh -T git@git.oschina.net
若返回
$ Welcome to Git@OSC, yourname!
则证明添加成功。若为 github,返回
Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.
但如果我们有多个相同平台的账号,譬如 github,则需要生成多对 ssh key,并分别命名,因为 github 不允许多个账号使用相同的 ssh key。
如何使用不同的 ssh key 登录不同的 Git 仓库呢,首先,在终端切换到 .ssh 目录下,生成新的 ssh key:
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # 此处使用新的邮箱
$ Generating public/private rsa key pair.
$ Enter file in which to save the key (/root/.ssh/id_rsa): 此处输入新的命名,譬如 id_rsa_corp
$ Enter passphrase (empty for no passphrase): 直接回车
$ Enter same passphrase again:
$ Your identification has been saved in /root/.ssh/id_rsa_corp. 公钥
$ Your public key has been saved in /root/.ssh/id_rsa_corp.pub. 私钥
接着在.ssh/目录下新建 config 文件。
# github
Host anything.github.com // 主机名字,不能重名
HostName github.com // 主机所在域名或IP
Port 22 // 端口,可不写
User MissYasiky // 用户名称
IdentityFile ~/.ssh/id_rsa_corp // 私钥路径
Host 中的 anything 是一个别名,可随意命名。注意,进行远程连接时,必须把 github.com 替换成 anything.github.com。譬如,
$ git clone git@anything.github.com:username/repo.git
或者
$ git remote add origin git@anything.github.com:username/repo.git
配置完 config 文件,还有一个地方需要注意,就是 .gitconfig 文件。此时将不能在多个仓库下通用 global 级别的 .gitconfig 了,需要考虑使用 repo 下的 .git/config 文件进行单独配置。关于 Git 配置的细节,详见 Git 配置
通过SSH与git@github.com建立加密连接的官方文档:
https://help.github.com/articles/generating-ssh-keys/