ssh远程管理服务的介绍
第6章 远程管理的介绍
6.1 服务的概念介绍
6.1.1 ssh和telnet服务的相同和不同点
ssh:
- 服务端口号为22
- 在数据传输的时候是加密的传输
- 一般在互联网中使用,可以使用root账号进行登录
telnet:
- 服务端口号为23
- 在数据的传输的时候是明文传输
- 一般在局域网中使用,不可以使用root账号进行登录
6.2 远程服务密码连接的原理
- 客户端向服务端发送请求建立的连接
- 服务端向客户端发送确认是建立连接吗(yes/no)
- 客户端在给服务端发送确认建立连接(yes),并且接收到一个公钥文件,保存到(~/.ssh/known_hosts)文件中
- 客户端进行密码确认的操作
- 服务端向客户端发送密码的确认消息,成功则建立连接
6.3 远程服务连接的方式
6.3.1 密码连接
密码连接有风险,第一,密码基本是固定的形式的;第二:密码的难易由密码的复杂度来决定的
6.3.2 密钥进行连接
6.3.2.1 秘钥连接的原理过程
- 客户端生成一个密钥对信息
- 客户端将公钥发送给服务端
- 客户端使用远程连接命令发送,并且请求建立连接
- 服务端接收客户端的请求,并且发送确认请求
- 客户端选择(yes),接着会生成一个公钥,保存到~/.ssh/known_hosts文件中
- 服务端会发送公钥质询信息(验证客户端有私钥可以解密我这个公钥的文件内容吗)
- 客户端接收质询信息,并且使用私钥进行解密
- 客户端将结果发送给服务端
- 连接建立成功
6.3.2.2 管理端创建密钥进行连接
- -t 指定密钥的类型(rsa,dsa)
- -f 指定密钥的文件名称
- -C 指定公钥的内容备注
- -P 指定旧的私钥密码
- -N 指定新的私钥密码
- -q 默认不进行输出
[root@nfs01 ~] # ssh-keygen -t dsa 密钥创建
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 保存密钥的地方
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa. 保存的公钥路径
Your public key has been saved in /root/.ssh/id_dsa.pub. 保存的私钥路径
The key fingerprint is:
SHA256:P4YoWQkaZ2j0Modev90czdp60WWVk9in08MdA0jr44Y root@nfs01
The key's randomart image is:
+---[DSA 1024]----+
| . ....+ o|
| . + ... Bo|
| B B . .oB|
| o X o . .o oo=|
| o + S .oo. +.|
| o + =o+o . |
| o o oEBo.. |
| . ..o. |
| .. |
+----[SHA256]-----+
You have new mail in /var/spool/mail/root
6.3.2.3 分发公钥
6.3.2.3.1 分发公钥的原理
- 管理端和远程服务器进行连接
- 连接的时候会将公钥发送给远程服务端的/root/.ssh/ authorized_keys的文件里,并且权限为600
- 在连接建立的时候,ssh服务会加载authorized_keys的文件里面的密钥信息来建立连接
6.3.2.3.2 分发公钥的操作步骤
[root@nfs01 .ssh] # ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 将公钥发送给172.16.1.41
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.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@172.16.1.41's password: 输入172.16.1.41的密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.41'"
and check to make sure that only the key(s) you wanted were added.
[root@nfs01 .ssh] # ssh 172.16.1.41 远程连接ssh 172.16.1.41
Last login: Sun Oct 27 20:44:18 2019 from 10.0.0.1
[root@backup ~] # 发现不需要密码就可以连接成功
6.4 利用脚本进行批量的分发
6.4.1 密码和端口都是固定的情况下
for i in 41 7
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no 172.16.1.$i
if [ $? -eq 0 ]
then
echo "172.16.1."$i"发送成功"
else
echo "172.16.1."$i"发送失败"
fi
done
6.4.1.1 ssh批量分发公钥的思路解析
6.4.1.1.1 手动分发公钥
ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.7
6.4.1.1.2 解决需要进行密钥分发的确认信息
ssh 参数-o里面可以指定StrictHostKeyChecking=no来忽略确认,直接将公钥发送过来就可以
ssh -o StrictHostKeyChecking=no 忽略确认,直接将公钥发送过来就可以
6.4.1.1.3 解决输入密码的困境
使用sshpass来忽略
sshpass -p123456 免交互来指定你输入的密码
6.4.1.1.4 将公钥发送的前几个过程连接起来
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa -o StrictHostKeyChecking=no 172.16.1.7 单个用户直接发密钥的思路
6.4.2 端口和密码不固定的情况下
[root@m01 scripts] # cat different.txt 编写定义IP 密码端口的配置文件
172.16.1.31 123456 52113
172.16.1.41 654321 22
172.16.1.7 123456 22
[root@m01 scripts] # cat different_miyao_fenfa.sh
#!/bin/bash
cat /server/scripts/different.txt|\
while read line 循环读取
do
IP_INFO="$(echo $line|awk '{print $1}')" 读取第一行,使用awk进行分割,取出IP
PASS_INFO="$(echo $line|awk '{print $2}')" 读取第二行,使用awk进行分割,取出密码
PORT_INFO="$(echo $line|awk '{print $3}')" 读取第三行,使用awk进行分割,取出端口
sshpass -p$PASS_INFO ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no $IP_INFO -p $PORT_INFO &>/dev/null 将IP,密码,端口依次赋值给变量下面进行调用
if [ $? -eq 0 ]
then
echo "Public key distribution success"
echo ""
else
echo "Public key distribution faild"
echo ""
fi
done
[root@m01 scripts] #
6.5 远程服务配置文件
- 17 #Port 22 这个是指定ssh端口配置
- 19 #ListenAddress 0.0.0.0 指定监听的IP地址(这个地址只能是服务器网 卡本身拥有的)
- 64 #PermitEmptyPasswords no 不允许空密码进行连接
- 38 #PermitRootLogin yes 禁止root登录系统
- 79 GSSAPIAuthentication no 关闭GSSAPI认证,加快ssh的连接
- 23 UseDNS no 关闭DNS反向解析 加快SSH连接效率
- 47 AuthorizedKeysFile .ssh/authorized_keys 存放发过来的公钥认证文件
6.6 远程访问防范入侵方案
- 使用密钥进行登录系统,别使用密码进行登录
- 解决ssh安全的问题
- 防火墙将ssh服务关闭,指定源IP地址限制(只对一些信任公网和私网可以访问)
- 对服务器的指定IP进行监听(监听的端口只能是网卡里面拥有的)
- 尽量不给服务器的外网IP(负载均衡是需要外网IP的)
- 尽量最小化的安装系统
- 把一些重要的文件进行指纹验证
- 将一些重要的文件进行加锁来解决
ssh远程管理服务的介绍的更多相关文章
- 五.ssh远程管理服务
01. 远程管理服务知识介绍 1) SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定: ...
- Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务
SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...
- SSH远程管理服务实战
目录 SSH远程管理服务实战 1.SSH基本概述 2.SSH相关命令 3.Xshell连接不上虚拟机 4.scp命令 5.sftp命令 6.SSH验证方式 7.SSH场景实践 8.SH安全优化 9.交 ...
- Linux系统学习 八、SSH服务—SSH远程管理服务
1.SSH简介 ssh(安全外壳协议)是Secure Shell的缩写,是建立在应用层和传输层基础上的安全协议.传输的时候是经过加密的,防止信息泄露,比telnet(明文传递)要安全很多. ftp安装 ...
- linux运维、架构之路-SSH远程管理服务
一.SSH服务功能介绍 1.远程登录管理 提供类似telnet远程联机服务器的服务,即上面提到的SSH服务 2.远程传输文件 是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供 ...
- Linux下 SSH远程管理服务
第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...
- 6. SSH远程管理服务实战
1. SSH基本概念? ssh是一个应用层安全协议 2.SSH主要的功能是? 实现远程登录, 数据传输过程中进行加密. 钉钉(澡堂模式) 远程登录: ssh telnet 3.SSH与Telnet之间 ...
- 6、SSH远程管理服务实战
1.SSH基本概述 SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输.确保了数据传输安全.那SSH服务主要功能有哪些呢? 1.提供远程连接服务器的服务. 2.对传输 ...
- Linux-SSH远程管理服务实战
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
随机推荐
- C++中对C的扩展学习新增语法——函数重载
函数重载 1.函数重载语法 1.同一个作用域(全局作用域.命名空间作用域.类作用域) 2.参数个数不同 3.参数类型不同 4.参数顺序不同 代码实现: 当函数名字一样的时候,通过参数类型.参数个数.参 ...
- Test Complete 的自动化测试 --- 三角形
Test Complete 的自动化测试 --- 三角形 PS:工具:Test Complete , OS:win 10 这里做三角形的测试与上一篇博客做计算器的测试大致一样,都是对.exe的执行文件 ...
- Apache中AllowOverride的详细配置使用
我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.hta ...
- 100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)
本文是对100天搞定机器学习|Day33-34 随机森林的补充 前文对随机森林的概念.工作原理.使用方法做了简单介绍,并提供了分类和回归的实例. 本期我们重点讲一下: 1.集成学习.Bagging和随 ...
- C语言I博客作业09
问题 答案 这个作业的属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-4/homework/10034 我 ...
- 反汇编分析NSString,你印象中的NSString是这样吗
我们先来定义三个NSString -(void) testNSString { NSString* a = @"abc"; NSString* b = [NSString stri ...
- python进程与线程的操作
进程操作: # project :Python_Script # -*- coding = UTF-8 -*- # Autohr :XingHeYang # File :processTest.py ...
- SpringBoot学习(六)—— springboot快速整合RabbitMQ
目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...
- C#变量---xdd
cshape(c#)学习笔记 1. string str1=Console.ReadLine();//键盘输入的默认为字符串 2. Console.WriteLine('你的成绩是'+a+'分'); ...
- Appium自动获取 Android 设备 id 和包名等信息(python)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhusongziye/article/d ...