SSH简述
远程访问及控制
1、SSH
1.1 简单介绍
SSH协议(secure shell)
是一种安全通道协议
对数据进行加密处理,用于远程管理
OpenSSH(安装包名,centos7自带)
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config
优点:
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
使用
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务(文件传输功能)
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
1.2 传输原理

第一次连接时,客户端发起请求
服务端生成会话id,会将会话id和服务端的公钥交给客户端
客户端得到服务端的公钥和会话id
客户端用户通过会话id与自己的公钥生成一个值,再将这个值通过服务端的公钥加密
客户端将加密后的值传给服务端,服务端利用自己的私钥解密得到客户端的公钥和客户端的会话id

免密登录
第一步生成密钥
ssh-keygen -t指定加密方式,默认rsa
Enter file in which to save the key (/home/lisi/.ssh/id_ecdsa):
#选择密钥文件存放位置,默认在当前用户家目录下 .ssh文件夹中
会生成两个文件,带.pub是公钥,要传给服务器
Enter passphrase (empty for no passphrase):
#对密钥文件进行加密,如果设置了密码,只是对文件进行加密,打开需要密码
ssh-copy-id -i服务器地址#将密钥传给服务器
登录

#登录 方法一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
命令 端口号
vim /etc/hosts
192.168.91.101 node2
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
jAdnvemeML+z00Zmk/SL5PWDVEvJqwPFID3iae+Xf4g.
jAdnvemeML+z00Zmk/SL5PWDVEvJqwPFID3iae+Xf4g.
例子:
#默认使用22端口 root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码
[root@31yml /]#ssh 192.168.177.200
The authenticity of host '192.168.177.200 (192.168.177.200)' can't be established.
ECDSA key fingerprint is SHA256:n6/OvgUhDi1cUlAFBjSt5QMt68EYA5fwnPZRQxHBR+c.
ECDSA key fingerprint is MD5:dc:49:1d:d0:21:f2:4f:79:3f:e6:e6:29:a8:4e:33:c4.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.177.200' (ECDSA) to the list of known hosts.
root@192.168.177.200's password:
Last login: Fri Aug 4 00:46:23 2023
########方便编写脚本#####################
[root@31yml ~]#vim /etc/ssh/ssh_config
#修改客户端配置文件 无需验证,有安全隐患
35 StrictHostKeyChecking no
#登录方法二
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
-t
例子:
[root@31yml ~]#ssh -l root 192.168.91.101
root@192.168.91.101's password:
Last login: Tue Sep 28 22:25:40 2021 from 192.168.91.100
1.3 服务端配置
1.3.1常用项配置

[root@ky15-1 ~]# vim /etc/ssh/sshd_config
17 Port 22
#生产建议修改
ListenAddress ip
#监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
LoginGraceTime 2m
#用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
PermitRootLogin yes
#默认 ubuntu不允许root远程ssh登录
StrictModes yes
#检查.ssh/文件的所有者,权限等
MaxAuthTries
#用来设置最大失败尝试登陆次数为6
MaxSessions 10
#同一个连接最大会话
PubkeyAuthentication yes
#基于key验证
PermitEmptyPasswords no
#密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
PasswordAuthentication yes
#基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10
#单位:秒
ClientAliveCountMax 3
#默认3
UseDNS yes
#提高速度可改为no 内网改为no 禁用反向解析
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
1.3.2 实际操作
修改默认端口

#修改默认端口
[root@localhost ssh]#vim /etc/ssh/sshd_config
#17 行修改自己默认的端口
17 Port 8848
禁止root用户登录

[root@localhost ssh]#vim /etc/ssh/sshd_config
#开启38 行 并改为 no,默认注释并写的yes
38 PermitRootLogin no
#注意虽然阻止了root 但是普通用户可以使用su
[root@localhost1 ~]#ssh zhangsan@192.168.177.100 -p 8848
zhangsan@192.168.177.100's password:
Last login: Fri Aug 27 16:50:35 2021
[zhangsan@localhost2 ~]$
[zhangsan@localhost2 ~]$ su root
密码:
[root@localhost2 zhangsan]#
修改 pam认证模块
[root@localhost ssh]#vim /etc/pam.d/su
#开启第6行,默认注释
6 auth required pam_wheel.so use_uid
白名单黑名单列表

[root@localhost ssh]#vim /etc/ssh/sshd_config
#手动添加
AllowUsers zhangsan@192.168.177.200 lisi
#允许所有有的主机访问我的lisi用户
#只允许 zhangsan 从192.168.177.200上访问
DenyUsers liwu
输错密码限制(验证此处)

[root@localhost ssh]#vim /etc/ssh/sshd_config
#取消注释 默认注释了
40 MaxAuthTries 2
[root@localhost ~]#ssh zhangsan@192.168.177.100 -p 8848
#默认次数3
zhangsan@192.168.177.100's password:
Permission denied, please try again.
zhangsan@192.168.177.100's password:
Received disconnect from 192.168.177.100 port 8848:2: Too many authentication failures
Authentication failed.
[root@localhost ~]# ssh -o NumberOfPasswordPrompts=8 root@192.168.177.100
#设置尝试次数为8
root@192.168.177.100's password:
1.3.3 使用秘钥对及免交互验证登录

客户端发起ssh请求,服务器会把自己的公钥发送给用户
用户会根据服务器发来的公钥对密码进行加密
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

首先在客户端生成一对密钥(ssh-keygen)
并将客户端的公钥ssh-copy-id 拷贝到服务端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

[root@31yml .ssh]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:LLWeS+q61pZv8xkco6lxU0w+l/DRfiw2feIsVNyLgQM root@31yml
The key's randomart image is:
+---[RSA 2048]----+
| E |
| . .o . |
| . oo..+ .|
| o = o.=oo.|
| . S B =.*.=|
| o * * + =.|
| ...O o . o |
| . +*oo o . |
| .o=+oooo |
[root@31yml .ssh]#ssh-copy-id -i 192.168.177.200
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.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.177.200's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.177.200'"
and check to make sure that only the key(s) you wanted were added.
[root@31yml .ssh]#ssh 192.168.177.200
Last login: Mon Aug 7 21:56:41 2023 from 192.168.177.100
[root@yml-2 ~]#
SSH简述的更多相关文章
- Spring(八)SSH整合简述
一.Spring与Struts2的整合 1.1.整合步骤 1.2.配置web.xml 1.3.配置spring配置文件applicationContext.xml 1.4.配置struts配置文件 1 ...
- SSH整合简述一
1.web.xml中配置 struts2过滤器 <filter> <filter-name>struts2</filter-name> <filter-cla ...
- SSH面试题收藏
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开Sesssion4. 创建事务Transation5. 持 ...
- TCP/IP协议工作原理简述
TCP/IP协议工作原理简述 // */ // ]]> TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...
- 第9章 使用ssh服务管理远程主机。
章节简述: 学习使用nmtui命令配置网卡参数.手工将多块网卡做绑定.使用nmcli命令查看网卡信息和使用ss命令查看网络及端口状态. 完整演示sshd服务配置方法并详细讲述每个参数的作用,实战基于密 ...
- ssh面试题
ssh面试题 创建时间: 2015-8-12 22:37 来源: http://wenku.baidu.com/link?url=cw1B46f98hAde0kmr3J-wv7PpklZJRmf6I ...
- java面试题之ssh
1.写出你熟悉的开源框架以及各自的作用(项目中为什么使用SSH) 答:框架:hibernate,spring,struts1/struts2. Hibernate主要用于数据持久化:封装了JDBC操作 ...
- HDFS 架构简述
HDFS 架构简述 Hadoop分布式文件系统(HDFS)是一个分布式的文件系统,运行在廉价的硬件上.它与现有的分布式文件系统有很多相似之处.然而与其他的分布式文件系统的差异也是显着的.HDFS是高容 ...
- CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解
在对获取资产信息时,简述有四种方案. 1.Agent (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...
- 002-自定义打开terminal,以及快捷键,其他程序类似,ssh管理-sshpass, Shuttle
一.利用Automator软件完成服务设定 1.使用Command+Space,打开Spotlight,搜索Automator 2.搜索到之后,双击打开,选择“服务[或快速操作]” 3.将“服务收到[ ...
随机推荐
- CentOS 8搭建Kubernetes-k8s集群-1.18.5
目录 环境配置 服务器信息 软件版本 环境正确性 端口正常开放 kube-master节点端口 kube-node节点端口 配置主机互信 配置hosts映射 配置ssh密钥 禁用swap 关闭SELi ...
- locust与jmeter测试过程及结果对比
JMeter和Locust都是强大的性能测试工具,各自拥有自己的优势和专注领域.JMeter提供了全面的功能和基于GUI的界面,适用于复杂的场景和非技术人员.相比之下,Locust采用了以代码为中心的 ...
- 【游记】NOIP2022 预备赛游记
Day -2 \(NOIP\) 就要来了,\(CSYZ\) 斥巨资给我们在 \(NOIP\) 正式考点举办了一场 \(NOIP\) 预备赛,真是太感动了~~ \(cy\) 说明天要颁奖,激动激动! D ...
- linux下的venv使用
首先安装该模块: sudo apt-get install python3-venv 之后创建用于存储工程的文件夹 mkdir [filename] 创建环境: python3 -m venv ven ...
- 王道oj/problem10
地址:http://oj.lgwenda.com/problem/10 思路:首先创建字符串赋初值,其次用gets()输入字符串[fgets()相对于gets()会多识别"\n", ...
- SQLite入门指南:轻松学习带有实例的完整教程(含示例)
SQLite官网:https://www.sqlite.org/index.html 源视频教程:https://www.bilibili.com/video/BV1Zz411i78o 菜鸟教程文档: ...
- React-Chat移动端聊天实例|react18 hooks仿微信App聊天界面
基于react18+react-vant+zustand仿微信手机端聊天室ReactChat. react18-chat 一款使用最新react18.x hooks.zustand搭配react-va ...
- # Unity 如何获取Texture 的内存大小
Unity 如何获取Texture 的内存大小 在Unity中,要获取Texture的内存文件大小,可以使用UnityEditor.TextureUtil类中的一些函数.这些函数提供了获取存储内存大小 ...
- Qt开发思想探幽]QObject、模板继承和多继承
@ 目录 [Qt开发探幽]QObject.模板继承和多继承 1. QObject为什么不允许模板继承: 2.如果需要使用QObject进行多继承的话,子对象引用的父类链至多只能含有一个QObject ...
- Spark入门系列视频教程
视频目录: Spark入门| 01 Spark概念架构 Spark入门| 02 Spark集群搭建 Spark入门| 03 Spark Shell算子操作 Spark入门| 04 Spark单词计数 ...