Linux 远程管理 SSH 服务

一、加密算法

(1)对称加密算法 (DES)

DES

  1. Jack想要给Harry发送信息一个信息A,为了安全起见,Jack使用一种加密算法,比如给信息通过加一个数字B得到一个新的数字C,然后以公开的方式发送给Harry
  2. Harry接受到数字C后,通过减去一个数字B得到最终的真正的信息A
  3. Jack发送给Harry的信息A称为明文;加密后的信息C称为密文;加密用的B称之为密钥
  4. 加密算法(方法)可以很复杂,不一定是加和减,也可以是乘和除等等
  5. 以上过程中,加密和解密的秘钥是同一个密钥B

(2)非对称加密算法 (RSA)

RSA

  1. 首先Harry生成一对有相互关系的密钥对,比如e(公钥)和f(私钥);其中公钥是可以公开给所有人的,私钥必须Harry本人私自留存,不得泄露。
  2. 当Jack发送请求时,Harry会把自己的公钥e发送给Jack
  3. Jack拿着Harry的公钥e通过一种加密算法将信息A加密成密文C,以公开的方式发送给Harry
  4. Harry收到密文C后,通过自己本地留存的私钥f将密文解密成最终的信息A
  5. 以上过程中,加密使用的是公钥e,解密使用的是私钥f;使用不同的秘钥加解密

(3)对称加密与非对称加密区别

对称加密

  1. 使用同一个密钥进行加密和解密,密钥容易泄露
  2. 加密速度快,效率高,数据传输速度,安全性较

非对称加密

  1. 使用不同的密钥(公钥和私钥)进行加密和解密
  2. 加密速度远远于对称加密,数据传输速度,安全性较

二、SSH基于用户名密码的认证原理

SSH CONNECT

  1. SSH客户端向SSH服务端发起一个登录请求

  2. SSH服务端将自己的公钥发送给SSH客户端

  3. SSH客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端

  4. SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密

  5. SSH服务端将解密出来的密码和/etc/shadow文件里的用户密码对比认证

  6. SSH服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令

三、搭建SSH服务

步骤一:关闭防火墙

# 关闭firewalld防火墙
# 临时关闭
systemctl stop firewalld
# 关闭开机自启动
systemctl disable firewalld

步骤二:关闭SELinux

# 临时关闭
setenforce 0
# 永久关闭 修改配置文件  
vim /etc/selinux/config
SELINUX=disabled

步骤三:配置外网YUM源

# 备份
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里云yum源文件
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 清除 YUM 缓存
# yum clean all
# 重构本地 YUM 源
# yum makecache

步骤四:openssh软件的安装

SSH服务底层的软件名称叫做openssh,open开源,ssh就是ssh服务。openssh属于C/S架构软件,其拥有客户端与服务器端。

客户端:ssh

服务端:openssh-server

# yum 安装 openssh
# yum install openssh -y
# 检测openssh是否安装成功
# rpm -qa | grep openssh# yum list installed |grep openssh

四、openssh 文件解释

(1)openssh-server 文件

[root@cc ~]# rpm -ql openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config	# ssh服务的主配置文件
/etc/sysconfig/sshd		# ssh服务的配置文件
/usr/lib/systemd/system/sshd-keygen.service 
/usr/lib/systemd/system/sshd.service # 服务管理脚本 systemctl start sshd
/usr/lib/systemd/system/sshd.socket
/usr/lib/systemd/system/sshd@.service
/usr/lib64/fipscheck/sshd.hmac
/usr/libexec/openssh/sftp-server # 文件共享服务 提供文件上传下载的服务
/usr/sbin/sshd # 二进制文件程序文件
/usr/sbin/sshd-keygen # 公钥生成工具
/usr/share/man/man5/moduli.5.gz # man手册
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd

(2)openssh-clients 文件

[root@cc ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config # 客户端配置文件
/usr/bin/scp # 远程copy命令 服务器间进行文件传输
/usr/bin/sftp # sftp客户端  上传下载文件操作
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
/usr/lib64/fipscheck/ssh.hmac
/usr/libexec/openssh/ssh-pkcs11-helper
/usr/share/man/man1/scp.1.gz # 客户端man手册
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz

五、SSH基本操作

(1)sshd 服务管理

# systemctl restart sshd	=>   重启sshd服务
# systemctl status sshd		=> 	 查看sshd状态
# systemctl stop sshd		=>   停止sshd服务
# systemctl start sshd		=>   启动sshd服务
# systemctl enable sshd		=>	 开机自启动
# systemctl disable sshd	=> 	 开机不自启

# ps -ef |grep sshd			=>	 查看进程
# netstat -tnlp |grep sshd	=> 	 查看端口
# ss -naltp |grep sshd		=> 	 查看端口

(2)查看了解并修改配置文件

# man 5 sshd_config

(3)更改SSH默认端口

RealServer服务器端:

# vim /etc/ssh/sshd_config
Port 22

(4)禁用root登录

RealServer服务器端:

# vim /etc/ssh/sshd_config
PermitRootLogin no

(5)SSH客户端不验证指纹

第一次连接远程服务器时:

The authenticity of host ‘11.1.1.100 (11.1.1.100)’ can’t be established.
ECDSA key fingerprint is SHA256:Y/cQNWWkX15o2MsJ5HOQBI2m8S33qIA+x3zys8J4pOY.
ECDSA key fingerprint is MD5:76:61:86:8b:d5:ee:bf:9c:60:e6:12:fa:f6:f0:74:36.
Are you sure you want to continue connecting (yes/no)?yes
Warning: Permanently added ‘11.1.1.100’ (ECDSA) to the list of known hosts.

如果我们不想验证指纹,可以通过更改SSH客户端的配置文件

# vim /etc/ssh/ssh_config
StrictHostKeyChecking no

(6)scp命令进行文件的上传下载

上传:

# scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径
-r : 递归上传,主要针对文件夹
-P : 更换了SSH服务的默认端口必须使用-P选项

下载:

# scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径
-r : 递归上传,主要针对文件夹
-P : 更换了SSH服务的默认端口必须使用-P选项

(7)强制用户下线

# 查看当前在线用户
# w
# 踢出某个账号
# pkill -kill -t pts/0

六、SSH免密登录解决方案

(1)基于用户名密码SSH认证原理

SSHPWDUSER

(2)基于密钥对SSH认证原理

SSHfreePWD
第一步:在A主机生成一个密钥对(公钥和私钥)

第二步:把A主机的公钥通过网络拷贝到B主机上,然后把其内容追加到B主机的~/.ssh/authorized_keys

第三步:由A主机向B主机发起登录请求,然后直接在B主机上进行公钥比对(判断A主机的公钥是否已经存储在B主机的authorized_keys文件中),如果存在且正确,则生成一个随机的字符串(如hsforpyp),然后使用A主机的公钥对其加密得到加密的后字符串(如dXdh,34njasz!z.)

第四步:通过网络,由B主机讲刚才生成的加密后的字符串传输给主机A,主机A接收到加密后的字符串以后,使用自己本地存储的私钥进行解密操作(得到hsforpyp)

第五步:把解密得到的hsforpyp发送到B主机,然后验证与刚才生成的字符串是否一致,如果一致,返回登录成功。反之,则返回登录失败。

(3)SSH免密登录的具体实现

SSH免密的实现思路一共分为三个步骤

第一步:在A主机针对某个账号(tom或jerry)生成公钥与私钥

第二步:使用某些方法把公钥发送到B主机中,然后追加到authorized_keys文件中

第三步:测试是否实现免密登录

① 常用方法

  1. 在A主机针对某个账号生成公钥与私钥
# ssh-keygen
# ll  ~/.ssh/
-rw------- 1 root root 1679 Mar 19 23:07 id_rsa   	# 私钥
-rw-r--r-- 1 root root  389 Mar 19 23:07 id_rsa.pub	# 公钥pub=public
  1. 使用ssh-copy-id把公钥文件中的内容传输到B主机的~/.ssh/authorized_keys文件中
# ssh-copy-id code@11.1.1.100
  1. 在A主机客户端测试免密登录是否成功
# ssh code@11.1.1.100

② 集群常用方法

  1. 生成公钥与私钥
# ssh-keygen
  1. 把id_rsa.pub文件,scp到B主机
# scp ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code/
  1. 在B主机服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中
# cd ~
# cat id_rsa.pub >> ~/.ssh/authorized_keys

注意事项:以上配置也比较简单,但是实际应用时要注意文件的权限
B主机:
~/.ssh : 700
~/.ssh/authorized_keys : 600

  1. 测试免密是否成功
# ssh code@11.1.1.100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值