SSH Key 的使用

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值