linux网络服务的SSH远程登录协议

一、ssh服务

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

简单来说ssh服务是

ssh的客户端通过网络与ssh服务端进行远程访问的控制的一种协议

1.SSH服务的优点

  • 安全性: 数据传输是加密的,可以防止信息泄漏。
  • 身份验证:防止未经授权的用户访问远程系统。
  • 远程管理:可通过SSH协议登录远程服务器并执行命令,无需直接物理访问设备。
  • 端口转发:SSH支持 端口转发功能,可以安全地传输其他协议和应用程序。
  • 传输速度: 数据传输是压缩的,可以提高传输速度。
  • SSH具有强大的安全性、身份验证和远程管理功能,使得它成为远程访问和管理计算机系统的首选协议。

远程管理linux系统基本上都要使用到ssh,

原因很简单:

telnet、FTP等传输方式都是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。

所以SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

所以ssh服务的主要优点有两个

  • 数据传输是加密的,可以防止信息泄漏
  • 数据传输是压缩的,可以提高传输速度

这也是ssh服务和telnet的区别所在

2.常见的ssh服务软件(工具)

客户端软件:

  • Linux 客户端: ssh, scp, sftp,slogin
  • Windows 客户端:xshell, MobaXterm,putty, securecrt, ssh secure shell client

服务端软件:

  • 软件名sshd,闭源。
  • 软件名openssh,服务名sshd(CENTOS 7默认安装的是这个软件包)

OpenSSH软件包

服务名称:sshd

  • 服务端主程序:/usr/sbin/sshd
  • 服务端配置文件:/etc/ssh/sshd_config
  • 客户端配置文件:/etc/ssh/ssh.config

OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。

Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。

systemctl start sshd命令即可启动sshd 服务

sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,除了2之外还有1(有漏洞)

3.SSH的组成结构

1.传输层协议(ssh-trans)
  1. 服务器认证,保密性以及完整性,压缩功能
  2. 一般运行在tcp/ip连接上,也可以用在其他可靠流
  3. ssh-trans提供加密技术,密码主机认证,数据完整性保护,数据压缩
  4. 密码主机认证,基于主机,不能进行用户认证
2.用户认证协议(ssh_userauth)
  1. 向服务器提供客户端用户鉴别功能
  2. 运行在ssh_trans之上
  3. 开始执行用户认证,从底层协议接受会话标识,认证私钥所有权

整体过程:boot --认证用户是否存在--输入密码--认证密码是否相符--登录成功)

3.连接协议(ssh_connect)
  1. 多个加密隧道分为逻辑通道
  2. 运行在用户认证上,提供交互式登录会话,远程命令执行,转发tcp/ip连接

4.SSH服务的原理(公钥传输的原理)

  1. 客户端发起链接请求。
  2. 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)。
  3. 客户端生成密钥对。
  4. 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密。
  5. 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res。
  6. 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)。
  7. 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密。

5.SSH的三种登录方式和免密登录

三种方法,第一次登录的时候都会提示

5.1 方法一

ini 复制代码
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
命令                                         端口号 //端口号不指定的情况下默认22
[root@localhost ~]#ssh root@192.168.1.100
#未使用-p指定端口号默认使用22端口   root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码

方法一图片示例

5.2 方法二

css 复制代码
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
​
[root@localhost ~]# ssh -l root 192.168.1.100
#未使用-p指定端口号默认使用22端口   root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码

5.3 方法三:跳板连接

csharp 复制代码
# 服务端模拟防火墙
[root@192 ~]# iptables -A INPUT -s 192.168.1.10 -j REJECT  //服务端拒绝所有来自192.168.72.10的访问
​
# 客户端借助 192.168.1.110跳板连接
[root@localhost ~]]# ssh -t 192.168.1.110 ssh 192.168.72.100  //方便跳板连接
​

免密登录

正常远程访问主机都是需要输入密码的,ss服务直接使用使用秘钥对及免交互验证的方式登录,也就是就是免密登录

简略步骤如下:

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

示例图:

6.服务器配置和客户端配置

6.1 服务器配置

服务器配置文件:/etc/ssh/sshd_config

配置文件中各部分释义及对应修改会产生什么效果

less 复制代码
[root@yyds ~]#vim /etc/ssh/sshd_config    //服务端配置
#Port 22    //注释默认配置端口为22
//修改Port后面可以修改端口,列如改成Port 9527,默认使用的端口就会变成9527
​
#ListenAddress 0.0.0.0
//表示监听所有地址的安全建议,如果不需要公网ssh访问,可以更改为内网网段
​
#LoginGraceTime 2m
//如果用户登录失败,在切断前服务器等待时间,默认单位秒
​
#PermitRootLogin no
//默认,ubuntu不允许root远程登录,虽然禁止root登录,但是仍然可以su root切换
//这里将no改成yes,允许直接切换到root用户,不过还需要去PAM配置文件中进行修改
打开PAM模块的配置文件:在终端中以管理员身份打开 /etc/pam.d/su 文件。
sudo nano /etc/pam.d/su
查找 "auth required pam_wheel.so use_uid" 行(第6行),并去掉前面的注释符号 '# ',使其生效。
​
#StrictModes yes
//检查.ssh/文件的属主,权限等
​
#MaxAuthTries 6
//最大登录失败次数,这里是6次,可以修改,但该行一般是被注释的,要使其生效需要去掉前面的注释符号 '# '
​
#MaxSessions 10
//同一个连接最大会话
​
#PubkeyAuthentication yes
//基于key验证
​
#PermitEmptyPasswords no
//密码验证,根据不同的安全级别需求,可以设置为no,使用认证的密钥登录
​
#PasswordAuthentication yes
//基于用户密码登录
​
#GatewayPorts no
#ClientAliveInterval 0
//秒
#ClientAliveCountMax 3
//默认3
#UseDNS no
//内网环境不使用DNS
​
GSSAPIAuthentication yes
//提高速度可改为no
#MaxStartups 10:30:100
//未认证连接最大值
​
//以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
//直接下面添加相应的规则就可以
列如:AllowUsers zhangsan@192.168.1.10
DenyUsers lisi
//只允许192.168.1.10的zhangsan用户登录,拒绝所有lisi用户登录
​
`注意,白名单和黑名单不要同时使用`
​

6.2 客户端配置

客户端配置文件:/etc/ssh/ssh_config

一般来说客户端的配置文件不怎么需要我们修改

在客户端配置文件/etc/ssh/ssh_config中第35行,将ask改成no,首次连接的时候系统就不会再进行公钥交换的询问了

相关推荐
韩楚风1 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学1 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO1 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu71 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我1 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、1 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程1 小时前
Linux中环境变量
linux
挥剑决浮云 -2 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学3 小时前
CentOS 7文件系统
linux·运维·centos
x晕x3 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器