概述
ssh可以基于密码进行认证,也可以基于密钥去认证用户,基于密钥认证时可以实现免密码登录的效果。
SSH公钥默认存储在账户的主目录下的~/.ssh
目录
ssh-keygen
生成私钥id_rsa以及对应的公钥
-t
选项表示指定密钥的类型(The type of the key to generate)
即指定算法,版本2的ssh协议可以指定的密钥类型有 “dsa”, “ecdsa”, “ed25519”, “rsa”
-C
选项表示用于识别这个密钥的注释 (comment to identify the key )
-f
选项表示直接指定密钥生成位置以及密钥的名称,默认id_rsa(私钥id_rsa,公钥id_rsa.pub)
单个
1、生成密钥对
ssh-keygen -t rsa -C "your-email@email.com"
2、查看公钥并复制
cat ~/.ssh/id_rsa.pub
3、登录账户并添加ssh key
多个
1、生成密钥对
GitHub
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C 'email'
company
ssh-keygen -t rsa -f ~/.ssh/id_rsa.company -C "email"
此时,~/.ssh
目录下应该有4个文件:id_rsa.company
文件和id_rsa.company.pub
文件,还有id_rsa.github
文件和id_rsa.github.pub
文件。
2、查看公钥并添加到github和gitlab
cat ~/.ssh/id_rsa.pub
3、新增并配置config文件
touch ~/.ssh/config
参数说明:
Host
:定义Host的名字,(建议与HostName一致)
HostName
:这个是真实的域名地址,要登录主机的主机名。
Port
:端口号(如果不是默认22端口,则需要指定端口号)
User
:配置登录名,例如:GitHub的username。
IdentityFile
:指定私钥文件的路径,也就是id_rsa
文件的绝对路径。
PreferredAuthentications
:配置登录时用什么权限认证,可设为publickey,password publickey,keyboard-interactive等
。
内容格式如下:
Host 域名或者IP
User test
IdentityFile ~/.ssh/id_rsa.company
PreferredAuthentications publickey
举例:
// github
Host github.com
HostName github.com
User lee
IdentityFile /Users/lee/.ssh/id_rsa.github
PreferredAuthentications publickey
// company
Host company
HostName 192.168.1.222
User lee
IdentityFile ~/.ssh/id_rsa.company
PreferredAuthentications publickey
git clone git@company:lee/test.git