为什么要生成密钥
在工作中,要访问服务器的话,为了鉴别你的身份,需要输入你的账户和密码,如果访问的频率比较低,直接输入账户和密码倒也没什么,但是访问的频率比较高,这就是一个很繁琐的操作,同时也为自动化(比如自动化部署)带来了一些不方便。为了解决这一个问题,就可以采用密钥对的方法来处理。
密钥对
所谓密钥,顾名思义就是秘密的钥匙,密钥分为对称密钥和非对称密钥。在这里所用的密钥是非对称密钥。而非对称密钥又叫做公钥密钥加密(即一个公钥一个密钥合成一个密钥对)。公钥用来加密,私钥用来解密。
#操作
那么具体的操作可以通俗一点来理解:就是你自己制造了一把锁子(公钥)和一把钥匙(密钥),然后你把锁子(公钥)放到了服务器上,把钥匙(密钥)放到了你的本地电脑上面,由于加密算法的存在,你的锁子和钥匙是唯一的一对,所以只要“密钥”这把钥匙能解开”公钥“这把锁,那么你就可以顺利访问服务器而不需要每次再输入你的账户和密码了。
#生成密钥的步骤
-
1 生成密钥对
Linux上面生成密钥对的语句:cd .ssh ll//查看有没有之前生成的密钥对 ssh-keygen -t rsa -C "你的输出的文件的名字" -f "你的输出的密钥文件的名字_rsa"//生成新的密钥对
然后直接回车下去到最后就好了最终的结果如下图:
这个时候,你可以用ls
来查看一下刚才创建的两个文件。带.pub后缀的就是你所创建的公钥,另一个文件就是私钥。如果你需要传到giehub之类的网站上去的话在,github的setting中找到SSH and GPG keys ,然后点击New SSH Key把带.pub后缀的文件中的内容复制粘贴到弹出的对话框里面保存就可以了。
在最新的mac系统中,使用ssh会报如下问题:
Enter passphrase for key '/Users/soyomo/.ssh/id_rsa':
解决这个问题的方法:
ssh-add -K ~/.ssh/id_rsa // 输入之后需要输入一下你的mac密码。然后就可以使用了
-
2 上传公钥到服务器
如果需要访问的是服务器,那么就需要上传你的公钥到对应的服务器上面了:ssh-copy-id -i 刚才生成的.pub文件 用户名@Ip地址(如:192.168.0.111) //之后输入该服务器的密码点击回车
-
3.登录到服务器检查
ssh 用户名@IP地址
之后按回车,输入相对应的密码。然后进入到你的用户的文件夹下面cd /用户名/.ssh ls
然后根据时间查看最新创建的文件(我这里是authorized_keys,有可能这个文件是会被改写的哦),查看一下内容。
ssh -i ./.ssh/soyomo chenfeng@192.1.265
//ssh -i 私钥的路径(例如:./.ssh)/私钥的名称 用户名@ip地址
你会发现,(如果上面的步骤没有错误)到这里会直接登录到服务器的。
如果你觉得每次都得指定路径,指定对应的私钥文件太复杂,那么你可以在.ssh下面配置一个config文件,但是这个文件在自动化部署的时候是没有必要去配置的,只是为了本地电脑登录服务器方便而已。
User root //登录的用户名
Host soyomo //服务器的别名
HostName IP//服务器的ip地址或者域名
Port 22 //服务器的端口号
StrictHostKeyChecking no //热键检查一般是no
IdentityFile ~/.ssh.id_rsa//指定的私钥文件
IdentitiesOnly yes//默认一般是yes防止超时被踢
Protocol 2//ssh的版本
Compression yes//默认是yes
ServerAliveInterval 60//心跳包,没过60s发送一个心跳包
serverAliveCountMax 20//默认值20
LogLevel INFO//输出的日志等级
再次使用的时候,直接
ssh soyomo //ssh加上别名就好了