ssh服务器客户端和服务端配置密钥验证的问题与注意要点

问题总结

这段时间在学习ssh远程控制,并且尝试着配置无需密码的密钥验证方式,但是在将公钥发送过去并配置好相关配置,但是在客户端对服务器进行访问的时候仍然是需要密码的,在翻阅了无数的博客和教程并调试之后,才最终解决这个问题,因此我决定在这里对整个配置流程进行一个总结分析,以便于自己今后回顾,也给各位和我一样的ssh小白一个少走弯路的机会

配置准备

首先我们肯定需要安装好ssh的服务端与客户端,执行以下步骤

1. 更新源(在服务端和客户端都需要)

sudo apt-get update

2. 本地使用的安装客户端

sudo apt-get install openssh-client

3. 远程访问的安装服务端

sudo apt-get install openssh-server

在做好以上步骤后,正常来说,我们执行如下操作是可以通过密码远程访问服务端了

ssh [服务端的用户名称]@[服务端ip地址]

配置密钥访问以实现无需密码

但是每次访问都需要输入密码其实蛮麻烦的,所以我们在这里配置一下密钥访问。

密钥访问的大概原理应该是客户端将一个公钥放置于服务端,在每次客户端申请访问的时候,服务端会用公钥加密一个数据,然后发送给客户端使其用私钥解密并发送返回,通过判别两个数据是否相同来判断客户端是否可信。

生成密钥

放置密钥的目录都在用户目录下,于是我们在客户端与服务端都创建一个 .ssh 目录。

mkdir ~/.ssh

然后我们进入客户端的.ssh目录,在其中创建密钥。

ssh-keygen -t [encryption_method] -f [key_name]

上述指令会在 .ssh 文件夹中创建两个密钥:名称为 “key_name” 的私钥与名称为 “key_name.pub” 的公钥,这两个密钥都使用你所指定的 “encryption_method” 加密算法加密。

ps:这里的 -t 参数与 -f 参数都是可以省略的。
-t 省略:默认使用 RSA 算法
-f 省略:key_name 默认为 id_rsa
如果使用了 -f 参数,在后续的配置中需要在 .ssh 目录下添加一个 config 文件,用以确保密钥验证过程中能够正确的使用指定的私钥。

传送公钥给服务端

这里传送公钥使用 scp 指令,scp指令的详细用法可以上网查阅,我这里就直接写了

scp [key_name.pub] [user]@[host]:[remote_folder]

上述指令中,key_name.pub 指公钥名(注意此处执行指令时是在 .ssh 目录下),user 指目标主机中的用户,也就是你在服务端创建 .ssh 目录时的用户,host 为主机ip,remote_folder 指要放入的目录,这里应该是 user 下的 .ssh 目录。

比如我当时使用的就是下面这样的:

scp rsa_key.pub test@master:/home/test/.ssh/

值得一提的是上面的 host 选项中应该是 ip 的地方我改成了 master,这里是我修改了 hosts 文件建立了一个映射,这里的 master 作用就相当于一个 ip,该方法我在后续会提到。

将服务端的密钥整合

一般情况下服务端会拥有不只一个密钥,因为肯定不止一个客户端会访问服务端,因此,要将公钥整合为一个,正常情况下,我们都是用一个名为 authorized_keys 的文件来整合公钥。

进入服务端,按照如下步骤整合公钥:

  1. 查看是否拥有 authorized_keys

cd ~/.ssh
ls

查看输出是否有 authorized_keys

  1. 如果没有,则创建该文件

touch authorized_keys

  1. 将公钥附加进去

cat [file_name] >> authorized_keys

到这一步,我们基本所有的步骤就完成了,但是还有一点很重要的事情,就是要设置权限,ssh对密钥文件的权限设置要求很高,我们权限求改如下

cd ~
chmod 700 ~/.ssh
cd ~/.ssh
chmod 600 authorized_keys

到这一步,如果不考虑其他的 ssh 配置问题,就基本结束了,接下来,我们要来配置 ssh 的一些设置文件了。

ssh配置文件

修改sshd_config文件

首先我们要去修改一下 sshd_config 文件,以确保我们的 ssh 服务能够使用密钥验证方式

sudo vim /etc/ssh/sshd_config

这个文件里面有一堆被 # 注释的文件,在其中找到 PubkeyAuthentication AuthorizedKeysFile 这两个条目,删去前面的注释符号,将其修改如下:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

这是为了使得 ssh 服务可以使用 authorized_keys 来进行 ssh 密钥验证。

建立hosts映射(可选)

这一步可做可不做,做了的话就是能够像我之前所写的那样,能够将 master 识别为一个 ip。

sudo vim /etc/hosts

然后在里面按照这样的格式添加。

[ipaddress] [name]

然后你就能用 name 替代 ipaddress 了。

.ssh 目录下的 config 文件建立

这里我只提一下,在你使用自己定义的名字来创建密钥时,你需要创建并配置这个文件,我具体也没有很吃透,如果有需要,可以去翻一下其他帖子,我能力有限。

收尾

在上面这些都做好后,我们就能直接 ssh 服务端而不需要密码了。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值