文章目录
- SSH服务:
- 学习服务的几个大点:
- ssh是什么?(secure shell)
- XShell:
- ssh的两种验证方式:==》基于公钥加密(非对称加密技术)
- ssh是如何加密和解密的?
- 对称加密和非对称加密:
- 公钥(public key)和私钥(private key)
- 加密算法和密钥的关系:
- 密钥的两个用途:数据加密和数字签名
- OpenSSH:==》C语言编写的
- 使用ssh命令远程登录的三种方式:
- 远程连接并执行命令:
- ssh服务配置文件:
- 查看端口号是否有人在使用:nc 192.168.0.122
- SSH的日志文件:
- ssh系统加固的方法:
- 密码和密钥认证讲解:
- 密钥认证的配置步骤:
- 使用scp命令远程复制文件/目录:
- 使用sftp命令从服务器下载文件
- 附加知识:
- 问题:
SSH服务:
学习服务的几个大点:
-
是什么,掌握原理
-
安装配置、调试、排错
-
修改配置文件==》记录配置项
-
日志–》排错
-
安全
ssh是什么?(secure shell)
作用:远程控制、远程管理
- ssh 是一个应用层的协议
- openssh 是一个软件,底层使用ssh协议来远程管理服务器,这个软件是开源免费的。
远程登录程序(remote login program)
ssh是安全的解释器(安全外壳协议):把里面的数据进行加密(通常我们在网络上传输数据如果不加密的话是明文传输的)
windows上是没有ssh服务的,linux上默认就会安装
默认的端口是:TCP(面向连接、传输更加可靠) 22号口
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zF1KrZZa-1597925097945)(C:\Users\86155\AppData\Roaming\Typora\typora-user-images\1594606811748.png)]
telnet远程登录协议:
telnet是比较早期的远程登录协议,使用的是明文进行传输,后来被淘汰了,安全性不是很高==》默认端口为23号–》采用TCP协议
ssh能干什么?**
一个可以登录到远程的机器上执行命令的程序。
ssh是属于应用层的协议,利用ssh协议可以有效防止远程管理过程中的信息泄露问题。
ssh官方网站:
https://www.openssh.com/
linux中默认安装的ssh服务是openssh(免费的)这个软件
在linux中查看openssh软件的方法:
rpm -qa|grep openssh ==》查看软件包是否安装
远程操作的工具:
ssh:远程执行命令、远程登录
scp:远程复制传输文件
sftp:远程传输文件
XShell:
xshell其实是windows里一个模拟的ssh客户端的软件
因为windows里默认没有安装ssh相关的软件,xshell就是这个软件
ssh的两种验证方式:==》基于公钥加密(非对称加密技术)
- 1、密码登录
- 2、密钥登录==》免密登录,十分的方便
ssh是如何加密和解密的?
使用的是非对称加密技术(基于公钥加密技术)
所谓的非对称加密就是使用公钥和私钥
主要有两种方式:一、数据加密传输;二:客户端和服务器的身份验证
两种用途:
- 数据加密
- 数字签名
对称加密和非对称加密:
- 对称加密:即加密和解密都是使用的同一个密钥。
- 非对称加密:加密使用的密钥和解密使用的密钥不相同,分别称为公钥(公开)、私钥(保密),非对称算法性能低,但安全性超强;能够加密的数据长度有限。
公钥(public key)和私钥(private key)
- 它们是成对生成的,这两个钥匙互不相同,两个密钥可以相互加密和解密
- 不能根据一个密钥而推算出另一个密钥
- 公钥对外开放,私钥只有私钥的持有人才知道
- 私钥应该由密钥的持有人妥善保管
**加密的算法:**使用不同的算法会使加密更加的安全
- ecdsa ==》目前默认使用的加密算法
- ed25519
- rsa
加密算法和密钥的关系:
-
加密算法:相当于工艺,它有着固定的流程。
-
密钥:密钥其实就是传递给加密算法的参数,不同的密钥加密出来的内容是不一样的。
密钥的两个用途:数据加密和数字签名
数据加密:
发送方使用接收方的公钥进行加密数据
接收方使用自己的私钥解密数据
数字签名:==》主要用于身份识别、然后再进行数据的加密
发送方:
对原始数据执行HASH算法得到摘要值
发送方用自己私钥加密摘要值
将加密的摘要值与原始数据发送给接收方
接收方:
用发送方公钥解密摘要值,同时对收到的原始数据同样执行HASH产生另一摘要值
将解密的摘要值与产生的摘要值对比
OpenSSH:==》C语言编写的
Openssh是我们远程登录的主要软件,默认的情况下是安装的
主要的软件包是:openssh-server、openssh-clients
服务名:sshd ==》d 表示守护进程
sshd:是一个多进程的服务
服务端:
主程序:/usr/sbin/sshd
配置文件:/etc/ssh/sshd_config ==>主要学习服务器的配置文件
客户端:
主程序:/usr/bin/ssh
配置文件:/etc/ssh/ssh_config
使用ssh命令远程登录的三种方式:
- ssh 用户名@服务器地址 -p 端口号
- ssh -l 用户名 服务器地址
- ssh 服务器地址 ==》默认会使用当前登录的用户名连接
远程连接并执行命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-izJJBfZi-1597925097981)(C:\Users\86155\AppData\Roaming\Typora\typora-user-images\1594629354517.png)]
ssh服务配置文件:
PermitRootLogin yes :表示允许root用户登录
如果设置了不允许root用户登录,就只能够使用普通用户进行登录
用户的信息存放在/etc/passwd
用户对应的密码存放在/etc/shadow
ssh登录使用的用户名和密码是linux里的/etc/passwd和/etc/shadow
但是普通用户的权限是有限的,如何让root用户能够登录linux系统给或者普通用户有root用户的权限?
sudo==》进行授权=》普通用户执行所有命令的时候在前面都要加一个sodu
su ==》切换
**注意:远程登录需要经过ssh服务的验证,使用su切换不需要经过sshd服务的验证,**所以我们先使用普通用户进行登录再使用su-进行切换时可以登录
#
#Port 22 端口号
#AddressFamily any
#ListenAddress 0.0.0.0 监听本地所有的ipv4的IP地址
#ListenAddress :: 监听本地ipv6的IP地址
- PubkeyAuthentication yes -->支持密钥认证
- PasswordAuthentication yes -->密码认证
- PermitEmpty Passwords no -->允许密码为空
- AuthorizedKeysFile .ssh/authorized_keys -->公钥存放的文件
man 5 sssh_config:查看配置文件,里面有对配置文件详细的介绍
修改配置文件要重启服务才会生效:
service sshd start
systemctl ssh start
普通用户登录如何使用高权限的命令?
查看端口号是否有人在使用:nc 192.168.0.122
nc -z 192.168.0.122 ==》表示不进行数据的交互
SSH的日志文件:
/var/log/secure
ssh系统加固的方法:
-
修改ssh服务的端口
-
禁用root用户登录
-
只是允许部分用户可以登录
-
启用密钥认证,禁用密码认证
-
结合iptables限制远程登录ip地址
-
与zabbix结合进行监控
-
结合黑白名单
- /etc/hosts.deny
- /etc/hosts.allow
密码和密钥认证讲解:
密码认证:
我们ssh默认使用的是密码认证,用户名存放在/etc/passwd和密码存放在/etc/shadow
密钥认证:==》更加安全
需要公钥和私钥==》需要我们自己动手去配置
know_hosts 存放接受到的别的机器的公钥==>只要我们ssh连接一次某个linux就会产生.ssh/know_hosts
know_hosts文件存放在.ssh目录里==》/root/.ssh==>ls -a 可以查看
密钥认证的配置步骤:
准备:一台客户机,一台服务器
**第一步:**在客户机上root用户登录的情况下,创建密钥对
生成ecdsa类型的密钥对
[root@sanchuang ~]# ssh-keygen -t ecdsa
#默认存放的路径为/root/.ssh/id_ecdsa.pub
#生成的私钥是只有root用户才可以查看到的,公钥则是大家都可以查看
#-t :表示指定类型
在.ssh下生成了公钥和私钥,将公钥传输到服务器端
第二步:**将本地产生的公钥文件上产到需要控制的节点服务器里
注意:节点服务器最好允许root用户登录
[root@sanchuang .ssh]# ssh-copy-id -i id_ecdsa.pub root@192.168.1.141
//如果端口号改了可以-p
#上传公钥到另外一台节点服务器上,这台服务器默认的端口是22,也没有禁用root用户登录
[root@sanchuang .ssh]# ssh-copy-id -i id_ecdsa.pub root@192.168.111.132
第三步:验证免密通道是否配置成功,只要不需要输入密码,就配置成功。
验证:
ssh -p '2233' 'root@192.168.1.141'
ssh root@192.168.111.132
注意:我们公钥复制到哪个用户家目录里面,哪个用户就会生效,最好放到root目录里面,因为他的权限大
authorized_keys :存放别人上传到本机的公钥(别人给的)
known_hosts:是本机ssh过(连接别人)哪些机器,存放的是连接过的机器的公钥。(一般,我们要想连接其他的远程机器,那个机器会先给我们本机发一个公钥)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdrumlSp-1597925097987)(C:\Users\86155\AppData\Roaming\Typora\typora-user-images\1594630850892.png)]
免密通道修建好了有什么好处?
- ssh连接的时候不需要密码
- 可以直接在远程的机器上执行命令
[root@sanchuang .ssh]#ssh root@192.168.111.132 mkdir /fengdeyong
[root@sanchuang .ssh]#ssh root@192.168.111.132 yum install tree -y
- 把文件推到其他的节点服务器
scp -P 2233 monitor.sh root@192.168.1.141:/root
免密通道是信任通道,分为单项信任(A方把公钥给了B方)和双向信任(A和B两个互相给了公钥)**
- 可以从节点服务器上拉取文件到管理节点
scp -P2233 root@192.168.1.141:/etc/passwd
附加一篇博客:https://blog.youkuaiyun.com/Inite/article/details/106875726
使用scp命令远程复制文件/目录:
-
scp 用户名@服务器地址:源文件 目标路径
-
scp 本地文件 用户名@服务器地址:目标路径
如果复制的是目录,则需要添加“-r”选项
使用sftp命令从服务器下载文件
格式:sftp 用户名@服务器地址
get 文件 ==》下载
put 文件 ==》上传
^C[root@localhost ~]# sftp -P 4455 denglanlan@192.168.0.122
denglanlan@192.168.0.122's password:
Connected to 192.168.0.122.
sftp>
[root@localhost .ssh]# sftp denglanlan@192.168.0.122
denglanlan@192.168.0.122's password:
Connected to 192.168.0.122.
sftp> get -r dengkeai /lianxi
Fetching /home/denglanlan/dengkeai/ to /lianxi/dengkeai
Retrieving /home/denglanlan/dengkeai
/home/denglanlan/dengkeai/keai
sftp> put -r /lianxi dengkeai
Uploading /lianxi/ to /home/denglanlan/dengkeai/lianxi
Entering /lianxi/
Entering /lianxi/6_2
/lianxi/6_2/.mysql_shell.sh.swp 100% 12KB 6.5MB/s 00:00
/lianxi/6_2/mysql_shell.sh 100% 976 507.3KB/s 00:00
/lianxi/6_2/.mysql_shell.sh.swo 100% 12KB 3.6MB/s 00:00
/lianxi/6_2/py_mysql.py 100% 259 173.3KB/s 00:00
/lianxi/6_2/.py_mysql.py.swp 100% 12KB 10.5MB/s 00:00
/lianxi/6_2/.c_ommit.py.swp 100% 12KB 5.1MB/s 00:00
/lianxi/6_2/123.py 100% 2549 2.1MB/s 00:00
Entering /lianxi/6-22
/lianxi/6-22/.nginx_编译.sh.swp 100% 12KB 3.7MB/s 00:00
/lianxi/6-22/123 100% 36 23.3KB/s 00:00
Entering /lianxi/shell_file
/lianxi/shell_file/one_key_install_nginx.sh 100% 1856 4.4MB/s 00:00
/lianxi/shell_file/scan_lan_port.sh 100% 914 2.8MB/s 00:00
/lianxi/shell_file/open_web_pc.txt 100% 0 0.0KB/s 00:00
/lianxi/shell_file/open_mysql_px.txt 100% 0 0.0KB/s 00:00
Entering /lianxi/ip配置
/lianxi/ip配置/show_ip.sh 100% 485 260.7KB/s 00:00
/lianxi/ip配置/show_ip.py 100% 585 694.5KB/s 00:00
Entering /lianxi/dengkeai
/lianxi/dengkeai/keai
!ls表示查看本地的文件内容:
sftp> ! ls
anaconda-ks.cfg mysql-community-embedded-compat-5.7.29-1.el7.x86_64.rpm nginx-1.19.0
mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar mysql-community-embedded-devel-5.7.29-1.el7.x86_64.rpm nginx-1.19.0.tar.gz
mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm python_note
mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm source_code
mysql-community-devel-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm
mysql-community-embedded-5.7.29-1.el7.x86_64.rpm mysql-community-test-5.7.29-1.el7.x86_64.rpm
sftp> ls
dengkeai
附加知识:
openssh软件默认在centos系统里已经安装,不需要额外安装
centos、Ubuntu、redhat、suse、debian、oracle linux、ali linux等支持ssh
http:明文传输 端口号80
日志:sshd没有记日志的功能,托付给rsyslog进行日志记录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XOd0VIG-1597925097995)(C:\Users\86155\AppData\Roaming\Typora\typora-user-images\1594691679082.png)]
在TCP封装的时候,给端口号预留了两个字节的大小(16位),所以端口号是1-65535,1-1024已经分配了规定的端口。
在ssh配置文件中设置banner /etc/ssh/welcome.txt,把内容写到这个文本文件中就会有提醒。
tail命令:
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
tail [参数] [文件]
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
id命令:
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
查看分区的挂载情况:df -Th
问题:
在配置文件中更改了端口号,重启服务时提示错误
[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
[root@localhost ~]# ssh denglanlan@192.168.0.122 -p 123
ssh: connect to host 192.168.0.122 port 123: Connection refused
解决办法:把selinux关掉即可
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
https://www.cnblogs.com/presleyren/p/12118419.html
372

被折叠的 条评论
为什么被折叠?



