[Linux][入门系列]CentOS 的基础使用-SSH安装设置与使用大全(下)-SSH的公秘钥登录及免密登录设置

版权声明: https://blog.csdn.net/tlytg/article/details/69393599

上一篇blog介绍了我们正常使用SSH进行连接的设置等操作。
SSH同时还支持使用公钥和秘钥的方式进行登录,本篇讲着重介绍ssh的这项功能

什么是公秘钥?

先来一段百科的定义~

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

简单的讲,公钥和秘钥是一对秘钥对,在计算机里以一段字符串来表示,通过公钥加密的东东,必须用私钥才能解密,所以我们通常在ssh的应用中,都会把公钥放到ssh的服务端,客户端需要连接时,用私钥去连接,看是否能够“解密”,如果可以就允许登录,无法“解密”则不能登录。

设置过程

很多教程使用了:
1. ssh-keygen 创建公钥和密钥。
2. ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
这样的方式来分配秘钥对。但是这样的方式,实质上是在linux里创建秘钥对,上传到linux里(即客户机为linux,服务机也为linux)。
鉴于同学用的本地机的系统的不同(Windows、Mac/linux),所以我们将分不同的系统进行相关讲解,主要区别在于Windows需要使用第三方软件创建公秘钥对。
同时,强烈不建议在ssh服务端上创建公秘钥对然后把秘钥下载到本地客户机上,因为这样的话,秘钥文件会通过网络,大大降低了安全性(公钥文件通过网络没有问题)。

Mac/Linux设置公秘钥对

由于Mac/Linux使用了Unix内核,所以这里一并进行演示。
首先打开本地的终端,生成公秘钥对

troy@Troy-PC # ssh-keygen -t rsa

这里-t制定秘钥类型,默认使用rsa,还有 dsa | ecdsa | ed25519 | rsa | rsa1
这是系统会提示。

Enter file in which to save the key (/Users/tory/.ssh/id_rsa):

这里可以选择默认,如果你之前设置过公秘钥对,建议换个目录存储,否则旧的秘钥会被覆盖。(我输入了pri)
之后系统会提示

Enter passphrase (empty for no passphrase):

如果你想同时使用密码和秘钥登录,这里可以输入设置你的密码,如果你想免密登录,这里直接输入回车跳过。
当你设置完成之后,你指定的目录下会有一对文件

troy@Troy-PC # ls
pri     pri.pub

这里以pub为尾缀的文件就是我们的公钥文件(public)。下一步我们就要将公钥文件传到服务器上。

使用ssh-copy-id命令进行上传

troy@Troy-PC # ssh-copy-id -i pri.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "pri.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.56.101's password:

输入密码之后就可以了。
我们尝试下使用秘钥登录:

troy@Troy-PC # ssh -i pri [email protected]
Last login: Thu Apr  6 16:33:26 2017 from 192.168.56.1
[root@localhost ~]#

成功了~

Window设置公秘钥对

由于Windows没有Linux下这么方便的命令,所以我们选择工具来生成秘钥对。
首先下载Xshell这个软件,这个软件有for school的免费版本,用于大家学习。
下载好之后,需要使用正常的用户名密码方式登录服务器,之后这里就需要用这个软件创建公秘钥对。

点击工具,新建生成向导
这里写图片描述

使用默认设置,下一步。
这里写图片描述
同和在Mac/Linux上面设置一样,如果你想要免密登录,这里密码可以设置为空。

之后我们在这里可以看到公钥的代码,我们这里可以选择复制,也可以选择保存文件。点击完成
这里写图片描述

之后我们需要登录我们当前的服务器,此时进入.ssh目录,新建文件为authorized_keys,然后把刚才复制的公钥粘进去。

[root@localhost ~]# cd ~/.ssh/
[root@localhost ~]# vim authorized_key

输入:wq保存退出。
最重要的一步是,需要给这个文件赋予权限,权限类型600

[root@localhost ~]# chmod 600 authorized_key

这样我们就可以使用秘钥登录啦。

另外一种备选方案是,我们使用rz命令(提前安装yum install lrzsz)将刚才的文件上传到服务器,放到.ssh目录下,赋予权限。

TIPS-上传文件

上传文件除了使用rz命令(在Linux服务端的ssh里使用),我们同样可以使用scp命令(在Mac/Linux本地使用)。或者使用sftp工具Xftp(Windows)或者filezilla(Windows或者Mac)。这些相关的详细内容,我们将在后续给大家介绍。

最后一步-服务端设置

执行完刚才那些,我们来到了最后一步服务端设置,主要是这里我们可以使用配置文件把密码登录这一项关掉,如下,把最后一下改成no.

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

别忘了重启sshd服务

[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart  sshd.service

这样一来,我们就没有办法使用密码登录了,只有使用秘钥才可以登录。

troy@Troy-PC #  ssh [email protected]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

至此,相关ssh的配置就基本结束了,下一篇讲讲述一些我们使用ssh当中遇到的问题,同学如果有问题,可以直接回复或[email protected],我们在下篇中解答~

猜你喜欢

转载自blog.csdn.net/tlytg/article/details/69393599