SSH远程登录的密钥验证授权机制

linux 专栏收录该内容
62 篇文章 0 订阅

SSH远程登录的密钥验证授权机制

 

当我们通过SSH远程另外一台服务器时可以通过输入密码,或者是不直接输入密码就可以登录登录目标服务器中

远程登录一般有两种方式:
密码登录:客户端发出授权请求时,服务端要求输入密码进行验证授权
密钥登录:客户端发出授权请求时,服务端根据事先配置的密钥验证身份并授权

配置步骤:
1、客户端生成密钥对,包括公钥、私钥
2、私钥配置在本地,将公钥发送给服务端
3、服务端将客户端的公钥加入到授权列表

SSH执行原理:
1、客户端发出远程登录请求 用户名@服务端主机名或者IP
2、服务端查看是否有 该用户名 的公钥
3、如果有,服务端生成随机字符串,并用公钥加密(就是随机字符串与公钥作某种运算),发送给客户端
4、客户端利用本地的私钥对字符串解密(逆运算)。
5、客户端将解密后的字符串结果发送给服务端
6、服务端利用解密的字符串与原始字符串匹配,如果相等,验证通过,并授权给客户端。

这里写图片描述

linux的SSH配置步骤:

192.168.5.14作为客户机
192.168.5.13作为服务器

1、在客户机生成密钥对

// 文件目录不指定,默认也是当前用户的.ssh目录下
在本地服务器上执行如下命令,用来生成秘钥
$ ssh-keygen -t rsa 之后全回车即可

[root@tslave .ssh]# ssh-keygen -t rsa 之后全回车即可
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): //回车即可
Enter same passphrase again:  //回车即可
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YWEga+0P54vUw/vT3c34Qb6lj59Kuw2ZrJxDenhpT7As root@tzgslave58
The key's randomart image is:
+---[RSA 2048]----+
|    . ..o        |
|     + . .       |
|    o . o   .    |
|   . . . ... o . |
|      o S. o+ +  |
|       B  1o.=   |
|      . * E==++  |
|     . . +.=2=+. |
|      . o.o*+X+  |
+----[SHA256]-----+
[root@tslave .ssh]# ll //可以看到生成id_rsa(私钥)  和 id_rsa.pub(公钥)
total 12
-rw-------  1 root root 1766 Jul 31 14:43 id_rsa 
-rw-r--r--  1 root root  397 Jul 31 14:43 id_rsa.pub
-rw-r--r--. 1 root root  349 Jul  3 11:49 known_hosts


2、拷贝公钥到服务端

// scp的意思就是 ssh copy
// 需要密码
//如果IP前不加用户,默认为root用户,如果是用其它用户可以为user@IP
$ scp  ~/.ssh/id_rsa.pub 192.168.5.13:~/.ssh/id_rsa.pub_192.168.5.14

3、服务端,把公钥添加到授权列表

在SSH服务器中导入公钥文本
在服务器中,目标用户(用来远程登录的用户)的公钥数据库位于~/.ssh/目录下,默认文件名是authorized_keys
注意修改authorized_keys权限

# 如果authorized_keys不存在,则创建它
touch ~/.ssh/authorized_keys
# 将上传的公钥添加到authorized_keys后面
cat ~/.ssh/id_rsa.pub_192.168.5.14 >> ~/.ssh/authorized_keys
# 修改authorized_keys权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 查看authorized_keys最后一行
tail -1 ~/.ssh/authorized_keys

注意:authorized_keys文件必须只能是该用户可读可写,其他用户组都是无权的状态才能生效。

// 追加公钥信息到上述文件中
$ cat ~/id_rsa.pub >>authorized_keys

5、从客户端远程登录,如果不要密码,说明配置成功

// 登陆自己就可以测试
$ ssh 192.168.5.13

[root@tslave .ssh]# ssh 192.168.5.13
Last login: Tue Jul 31 15:05:08 2018 from 192.168.5.14

6 远程执行命令

http://www.cnblogs.com/ilfmonday/p/ShellRemote.html

6.1 简单命令

双引号,必须有。如果不加双引号,第二个命令在本地执行
分号,两个命令之间用分号隔开

ssh tslave@192.168.5.13 "cd ~ ; touch ssh.txt"

6.2 使用脚本执行多命令

#!/bin/bash
ssh tslave@192.168.5.13 > /dev/null 2>&1 << sshoff
    cd ~
    touch autossh.txt
exit
sshoff

echo "done!"

远程执行的内容在<< sshoffsshoff之间,在远程机器上的操作就位于其中
注意的点
sshoff可以随便修改成其他形式
重定向目的在于不显示远程的输出了
在结束前,加exit退出远程节点

通过上述配置后,就可以不需要密码则可以直接登录目标服务器进行相关操作

  • 2
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值