SSH服务完整版

常见的网络服务

文件共享服务:FTP SMB NFS

域名管理服务:DNS

网站服务:Apache(httpd) Nginx IIS Lighttpd

邮件服务:Mail

远程管理服务:SSH telnet

动态地址管理服务:DHCP

什么是服务?

  • 本质是运行在操作系统后台的一个或者多个程序

  • 它是可靠的、并发的、连续的、不间断的运行,随时可以接受请求

  • 交互式提供服务

服务架构模型

1 B/S架构

browser浏览器<=>server服务器

概念:这种结构的用户界面完全通过浏览器实现,使用http协议

优势:节约开发成本;广域网,有浏览器即可;维护升级简单

劣势:面向整个互联网,安全性低;

例如:www.taobao.com

2 C/S架构

client客户端<=>server服务端

概念:指客户端与服务端之间的通信方式,客户端提供用户请求接口,服务端响应请求进行相应处理并给客户端返回结果

优势:面向固定用户,安全性高

劣势:专业网络、小型局域网,需要安装相应的软件

例如:淘宝APP

关于端口号的设定

服务的端口号只有整数,范围是0到65535

1-255        知名端口号;如FTP 21号、WEB 80号、SSH 22号
256-1023     通常是UNIX系统占用来提供特定的服务
1024-5000    客户端的临时端口,随机产生
> 5000       互联网上的其他服务预留端口

如何查看系统的默认注册端口号?

/etc/serivces

SSH服务概述

SSH是一种用于安全访问远程服务器的协议,一个远程管理工具

1 加密算法

①DES:对称加密算法

发送方使用密钥明文数据加密成密文,然后发送

接收方收到密文后,使用同一个密钥将密文解密成明文进行读取

优点:加密速度快;数据传输快;效率高

劣势:使用同一个密钥进行加密和解密,密钥易泄露;安全性低

②RSA:非对称加密

首先接收方生成一对有相互关系的密钥对:公钥e和私钥f

发送方使用接收方发送过来的公钥将明文数据加密成密文,然后发送

接收方收到密文后,使用本地留存的私钥将密文解密成明文进行读取

优点:使用不同的密钥进行加密和解密,安全性高

劣势:加密速度慢;数据传输慢

2 SSH基于用户名密码认证原理

SSH客户端向SSH服务端发送登录请求

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

SSH客户端使用公钥将自己的密码加密后发送给SSH服务端

SSH服务端收到SSH客户端发送来的密文后使用本地留存的私钥解密

SSH服务端将解密后的密码与/etc/shadow文件里面的密码对比认证

若认证成功,则返回登录成功结果,并返回一个随机会话口令给SSH客户端

这个随机口令用于后面两台主机进行数据传输的一个临时加密会话口令

请添加图片描述

注意:

SSH服务在用户登录认证时使用RSA加密算法;安全

认证通过后进行数据传输时使用DES加密算法;速度快

3 openssh软件

openssh软件是SSH服务底层的软件;openssh属于C/S架构,拥有客户端和服务端;open是开源,ssh是SSH服务

检查openssh是否安装

rpm -qa|grep openssh
or
yum list installed|grep openssh
——————————————————————————————————
openssh-7.4p1-22.el7_9.x86_64            //服务端和客户端的公共组件
openssh-server-7.4p1-22.el7_9.x86_64     //服务端安装包
openssh-clients-7.4p1-22.el7_9.x86_64    //客户端安装包

openssh安装命令:

yum install openssh -y

关于openssh生成的文件

rpm -ql openssh-server
--------
/etc/ssh/sshd_config    //服务端配置文件
/etc/sysconfig/sshd     //SSH服务的主配置文件
/usr/lib/systemd/system/sshd.service    //服务管理
/usr/sbin/sshd          //二进制文件
/usr/sbin/sshd-keygen   //公钥生成工具
——————————————————————————————————
rpm -ql openssh-clients
--------
/etc/ssh/ssh_config     //客户端配置文件
/usr/bin/scp            //远程copy命令
/usr/bin/sftp           //sftp客户端,上传下载文件

SSH服务搭建

基本语法

查看参数和帮助 
ssh --help 
man ssh 
—————————————————————————————————— 
ssh [option] 
-l 指定连接的用户 
-p 指定连接端口号 
—————————————————————————————————— 
ssh 10.1.1.1 -l tom 或 ssh tom@10.1.1.1
SSHD服务管理

systemctl start/stop/restart/status sshd    #开启/停止/重启/状态
systemctl enable/disable sshd    #开机自启动/开机不启动
ps -ef|grep sshd    #进程
netstat -tnlp|grep sshd    #端口
ss -naltp|grep sshd    

环境假设:

服务器主机名IP
跳板机jumpserver192.168.27.192(NET)\192.168.153.131(主机)
真实业务服务器realserver192.168.153.130(主机)

其他:

假设每个开发人员在jumpserver上有自己的账户tom和jerry;且他们只能管理自己的文件

realserver不允许使用默认端口22,防止自动脚本攻击;不允许使用root远程登录

开发人员在realserver上使用code账号登录,密码使用随机工具生成;

1 修改主机名

hostnamectl set-hostname jumpserver
hostnamectl set-hostname realserver
su #立即生效

2 静态IP设置

jumpserver

vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.27.192
NETMASK=255.255.255.0
GATEWAY=192.168.27.2
DNS1=192.168.27.2
————————————————————————————————
cp ifcfg-ens33 ifcfg-ens37  #仅主机模式网卡没有配置文件,复制过来
————————————————————————————————
vim ifcfg-ens37
NAME="ens37"    #名称需要修改
UUID="10ac807e-4d23-44a6-9885-c0efe3a4cjh7"  #后3位字符随便改一下
DEVICE="ens37"
IPADDR=192.168.153.131
NETMASK=255.255.255.0
————————————————————————————————
systemctl restart network

realserver

vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.153.130
NETMASK=255.255.255.0
————————————————————————————————
systemctl restart network

扩展:关闭NetworkManager

Linux图形化界面中的网络管理器,有些时候我们设置了静态IP。但是重启网络后,其并没有生效或者和你设置的IP地址不一致,很可能是由于NetworkManager工具的影响。

systemctl stop NetworkManager
systemctl disable NetworkManager

3 关闭firewalld和SElinux

systemctl stop firewalld
systemctl disable firewalld

关闭SElinux
getenforce #查看状态
setenforce 0 #临时关闭

vim /etc/selinux/config  #永久关闭
SELINUX=disabled

4 配置yum源

jumpserver配置外网yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
yum clean all
yum makecache

realserver配置本地yum源(仅主机模式不可上外网)

mkdir /mnt/cdrom
mount -o ro /dev/sr0 /mnt/cdrom
chmod +x /etc/rc.local
echo 'mount -o ro /dev/sr0 /mnt/cdrom' >> /etc/rc.local  #永久挂载
————————————————————————————————
vim /etc/yum.repos.d/local.repo
[local]
name=local yum
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1

5 在jumpserver上创建用户

#创建前端用户组html
groupadd html
#创建组内用户tom和jerry
useradd -g html tom
useradd -g html jerry

#添加密码
echo 123456 |passwd --stdin tom
echo 123456 |passwd --stdin jerry

6 在jumpserver上创建数据目录并设置权限

#创建数据目录/code/html
mkdir -p /code/html
drwxr-xr-x 2 root root 6 May 21 00:23 html
#更改/code/html的属组为html并添加w权限
chgrp -R html /code/html
chmod -R g+w /code/html
drwxrwxr-x 2 root html 6 May 21 00:23 html
#添加粘滞位t,防止误删除
chmod 1770 /code/html
drwxrwx--T 2 root html 6 May 21 00:23 html

7 在realserver上修改SSH服务端配置文件(完成)

禁止root远程登录、修改端口号为3712;注意选用的端口是否被占用

vim /etc/ssh/sshd_config
PermitRootLogin no   #38行
Port 3712   #17行,去掉注释并修改

重启SSH服务,使配置文件生效

systemctl restart sshd

创建code账号

useradd code
echo 123456|passwd --stdin code

测试:在jumpserver上远程连接realserver

[tom@jumpserver code]$ ssh -p 3712 code@192.168.153.130
关于指纹验证

请添加图片描述

如果你不想要指纹验证,可以修改jumpserver(SSH客户端)的配置文件

vim /etc/ssh/ssh_config
StrictHostKeyChecking no   #35行

请添加图片描述

8 密码生成工具pwgen

在实际生产环境中,其用户密码一定不要手工设置,建议使用专业的密码生成工具如pwgen。

安装pwgen

#pwgen工具在epel源中
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all
yum makecache
————————————————————————————————
yum install pwgen -y   #安装
————————————————————————————————
#因为realserver不能连接外网,可以在jumpserver下载再传过去安装
yumdownloader --destdir=/code --resolve pwgen
--destdir 指定下载的软件包存放路径
--resolve 解决依赖关系并下载所需的包
————————————————————————————————
[tom@jumpserver code]$ scp -P 3712 pwgen-2.08-1.el7.x86_64.rpm code@192.168.153.130:/home/code

pwgen基本语法

pwgen 选项参数 长度 生成个数
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]

OPTIONS:
-c  密码中至少包含一个大写字母or –capitalize
-A  密码中不包含大写字母or –no-capitalize
-n  密码中至少包含一个数字or –numerals
-0  密码中不包含数字or –no-numerals
-y  密码中至少包含一个特殊符号or –symbols
-s  生成完全随机密码or –secure
-B  密码中不包含歧义字符(例如1,l,O,0)or –ambiguous
-H  使用SHA1 hash给定的文件作为一个随机种子or –sha1=path/to/file[#seed]
-C  在列中打印生成的密码
-1  不要在列中打印生成的密码,即一行一个密码
-v  不要使用任何元音,以避免偶然的脏话or –no-vowels
pwgen -cnBs1 10 1

9 SSH服务补充——scp命令

用于Linux系统与Linux系统之间进行文件的传输(上传、下载)

基本语法

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

10 SSH服务补充——踢出用户

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

SSH免密登录

使得jumpserver与realserver自动连接,无须输入密码

思路:

在jumpserver针对某个用户生成公钥和私钥,再把公钥发送到realserver中,然后追加到authorized_keys文件中

方法有二,分别使用tom和jerry来演示

方法1:比较常用(登录tom账号操作)

①使用tom账号生成他的公钥和私钥

ssh-keygen		#一路enter键就可以了

请添加图片描述

②使用命令ssh-copy-id把公钥中的内容传输到服务端的~/.ssh/authorized_keys文件中

ssh-copy-id -p 3712 code@192.168.153.130

③现在可以免密连接了

ssh -p 3712 code@192.168.153.130

方法2:集群常用(登录jerry账号操作)

①使用jerry账号生成他的公钥和私钥

ssh-keygen

②使用scp命令,将jerry的公钥id_rsa.pub上传到realserver服务端

scp -P 3712 /home/jerry/.ssh/id_rsa.pub code@192.168.153.130:/home/code

③登录realserver服务端,将id_rsa.pub文件中的内容追加到authorized_keys

[code@realserver ~]$ 
cat /home/code/id_rsa.pub >> /home/code/.ssh/authorized_keys

④现在可以免密登录了

ssh -p 3712 code@192.168.153.130

扩展:关于authorized_keys和known_hosts文件

共同点:位置相同~/.ssh/

authorized_keys:将本地公钥复制到远程服务端的authorized_keys文件中,就可以实现免密登录了;

known_hosts:做个记录更加方便:它会记录曾经使用SSH服务远程连接过的IP地址;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值