1.查看密钥
打开终端查看是否已经存在SSH密钥:
$ cd ~/.ssh
其实就是/Users/你的电脑用户名/.ssh/文件夹。
如果没有密钥则不会有此文件夹。
2.生成新的密钥
2.1生成密钥步骤
生成密钥命令如下:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,因为这个Key仅仅用于简单的服务,所以也无需设置密码。
完成后会有如下显示
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/你的电脑用户名/.ssh/id_rsa.
Your public key has been saved in /Users/你的电脑用户名/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5V6ZCQNS/3bVdl0GjGgQpWMFLazxTslnKbW2B1mbC+E example@qq.com
如果服务器端需要公钥, 直接把.ssh目录下的id_rsa.pub
配置即可, id_rsa为私钥一定要保密!
2.2ssh-keygen命令说明
ssh-keygen
命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
语法
ssh-keygen(选项)
选项
-t:指定要创建的密钥类型。
-b:指定密钥长度;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-e:读取openssh的私钥或者公钥文件;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
3.SSH密钥管理
ssh-add
这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent
所管理的一个 session 当中。而 ssh-agent
是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent
服务也就重置了。
3.1 Mac中秘钥管理机制
Mac 系统内置了一个 Keychain 的服务及其管理程序,可以方便的帮你管理各种秘钥,其中包括 ssh 秘钥。
ssh-add
默认将制定的秘钥添加在当前运行的 ssh-agent
服务中,但是你可以改变这个默认行为让它添加到 keychain 服务中,让 Mac 来帮你记住、管理并保障这些秘钥的安全性。
你所要做的就是执行下面的命令:
$ ssh-add -K [path/to/your/ssh-key]
之后,其他的程序请求 ssh 秘钥的时候,会通过 Keychain 服务来请求。
3.2 ssh-add命令说明
ssh-add
命令是把专用密钥添加到ssh-agent
的高速缓存中。
该命令位置在/usr/bin/ssh-add
。
语法
ssh-add [-cDdLlXx] [-t life] [file ...]
ssh-add -s pkcs11
ssh-add -e pkcs11
选项
-D:删除ssh-agent中的所有密钥.
-d:从ssh-agent中的删除密钥
-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。
-s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。
-L:显示ssh-agent中的公钥
-l:显示ssh-agent中的密钥
-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥
-X:对ssh-agent进行解锁
-x:对ssh-agent进行加锁
实例
1、把专用密钥添加到 ssh-agent 的高速缓存中:
$ ssh-add ~/.ssh/id_dsa
2、从ssh-agent中删除密钥:
$ ssh-add -d ~/.ssh/id_xxx.pub
3、查看ssh-agent中的密钥:
$ ssh-add -l
4.使用多个SSH密钥并对应不同的应用程序
在~/.ssh/config
中指定对应服务所使用的公秘钥名称,如果没有 config 文件的话就新建一个,并输入以下内容:
$ vim ~/.ssh/config
生成后将新的ssh public key添加到内部的gitlab仓库中, 然后在~/.ssh 目录下创建config文件,该文件用于配置私钥对应的服务器。内容如下:
Host git.oschina.net #git.oschina.net
HostName git.oschina.net
User git
Port 22
IdentityFile ~/.ssh/id_rsa_osc
Host github.com #github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host code.csdn.net #csdn
HostName code.csdn.net
User git
IdentityFile ~/.ssh/id_rsa_csdn
第一行的 Host 只是一个名字(可以自己命名)
第三行的 Hostname 才是对应的真实地址,但是两者最好保持一致,这样不用在脑袋里转换。
Host 还可以帮助你把对应的 IP 变成好记的名字。
比如说我在公司内部配置了 Git Server(基于 gitolite 或 Gitlab 或任何工具)。
正常的访问地址是:git://xxx.xxx.xxx.xxx:repo.git
,
如下的配置则可以帮你把它简化成:git.visionet:repo.git
Host git.visionet #company host
HostName 192.168.189.22
User git
IdentityFile ~/.ssh/id_rsa_company
5.添加.pub公钥到Git服务器上
使用scp命令传输.pub公钥文件到Git服务器上
scp ~/.ssh/id_rsa.pub root@192.168.56.1:~/
5.1 scp命令说明
scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。
语法
scp(选项)(参数)
选项
-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定ssh配置文件;
-l:指定宽带限制;
-o:指定使用的ssh选项;
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制(复制目录使用)。
参数
源文件:指定要复制的源文件。
目标文件:目标文件。格式为user@host:filename
(文件名为目标文件的名称)。
实例
从远处复制到本地
scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
从10.10.10.10机器上的/opt/soft/
中下载mongodb目录到本地的/opt/soft/
目录来。
6.测试是否正常工作
$ ssh -T git@xxxx.com
如果连接成功的话,会出现以下信息。
Hi USERNAME! You've successfully authenticated.