ssh服务详解

简介:

什么是openssh

openssl是使用ssh协议远程登录系统的连接工具。它能加密流量、防窃听和其他攻击。此外还能够提供隧道功能、多种认证方法和复杂的配置选项;

openssh是一组工具的集合,其套件包括三部分:

  • 远程操作类    ssh、scp、sftp

  • 密钥管理类    ssh-add、ssh-keysign、ssh-keyscan和ssh-keygen

  • 服务提供者类    sshd、sftp-server、ssh-agent


openssh官方网站:

https://www.openssh.com/


为什么是ssh

远程连接的工具有很多,为什么偏偏选择ssh?

ssh英文全称是secure shell protocol,安全的壳程序协议。有v1和v2两个版本,目前v2是主流;

以telnet为代表的远程连接工具已经被ssh替代,其关键原因就是ssh提供数据加密的功能,telnet还是明文传输存在被窃听的隐患;

ssh的加密使用非对称密钥加密体系完成,所谓的非对称加密,就是公钥、私钥组成密钥对。可以加密对称密钥也可以验证身份;

连接加密技术简介:

通信的任一端都有一对密钥--公钥和私钥

公钥:由私钥推导生成,但不能反推;公之于众;安全性高但加密效率低,一般用于加密对称密钥;还可以解密私钥加密的数据,进行身份认证;CA证书;

私钥:必须保存在本机;可以对随机字符串加密,对方用自己的公钥解密,实现签名;

ssh在远程连接的用途上已经是主流,大家对此也都已形成共识,但是telent在一些场景中依然使用较广即使它是明文传输;

ssh服务详解

ssh基于C/S结构,C表示Client客户端,S表示Server服务器端,sshd表示服务;

服务端:默认使用tcp 22端口,ss -ntl可以查看,而且既然是默认说明可以修改;

客户端:ssh的登陆有两种认证方式,一是基于口令,一是基于key;

ssh的命令格式一般为:ssh  用户@ip 命令(具体man或help查看);


ssh基于口令的登陆过程:

  • 服务器开启sshd服务,会在/etc/ssh/目录下查找ssh_host_*文件,即公钥私钥文件(在安装系统时生成);

  • 客户端请求连接,服务端将自己的公钥文件发给客户端;

  • 客户端检查~/.ssh/known_hosts中是否有服务器公钥,没有的话就会在ssh连接时提示“(yes/no)”,yes就是将公钥加入文件中;

  • 客户端输入口令,并用服务器公钥加密传给服务器端;

  • 服务器用自己的私钥解密,得到口令,正确的话认证通过;


ssh基于key的登陆过程:

  • 客户端生成一对密钥(ssh-keygen);

  • 客户端将公钥传递给服务器(key-copy-id);

  • 服务器端在~/.ssh/下生成文件authorized_keys,其内容是客户端公钥信息;

  • 客户端连接服务器时,会附带本身用户名信息等;

  • 服务器根据用户信息对比authorized_keys文件,若一致的话则使用这个公钥加密一串随机字符,并发给客户端;

  • 客户端收到加密数据,用自己私钥解密,并将解密的字符串发给服务器;

  • 服务器对比收到的字符串与之前生成的字符串,一致的话认证通过


/etc/ssh/sshd_config 是sshd的配置文件,很多默认的配置都在此文件定义,以下举出几条:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Port 22
#这就是ssh监听22端口的原因,可以修改
 
#ListenAddress 0.0.0.0
#默认监听所有ip,安全起见可以将监听地址指定为管理员地址
 
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
#版本2的私钥文件,rsa、dsa是非对称密钥体系的两种实现方式
 
#LoginGraceTime 2m
#默认的2分钟不输入口令则退出登陆
#PermitRootLogin yes
#默认是允许root登陆
 
UsePAM  yes
#使用pam,pam定义一个安全框架,通过特定的模块实现对服务的安全保护

端口转发的三种方式

ssh端口转发的前提都是通过ssh建立“隧道”

1、本地端口转发

网络结构:出差员工A------[防火墙]-----ssh服务器B------telnet服务器C

场景一:员工A想要登陆公司telnet服务器,但公司出于安全考虑不允许外网直接访问C但是允许访问B。因此以B机器为跳板机,登陆B再以B的身份登陆C机器

在A上配置一条命令

1
2
3
4
5
ssh  -L 12345:telnet-server:23   ssh -server -Nf
# -L本地端口转发
# 12345是本机监听的端口
# -N 表示不打开远程终端
# -f 表示后台执行

然后在A上输入“telnet 127.0.0.1 12345”即可登陆telnet服务器,很神奇吧,其工作原理如下:

  • 本机127.0.0.1正在监听12345端口,当收到telnet命令,触发此端口,与127.0.0.1的另一个端口建立连接;

  • 同时触发本机与ssh服务器建立ssh连接;

  • ssh服务器再以自己作为telnet客户端与telnet服务器建立连接;

  • telnet服务器23端口与B建立连接,看到的都是B的信息,但是实际连接的确实A

关键点就是,本机监听本机端口12345

2、远程端口转发

网络结构:出差员工A------[防火墙]-----ssh客户端B------telnet服务器C

场景二:与“场景一”类似,只是此时防火墙不允许外网主动与内网主机建立ssh连接

此场景下,出差员工当作ssh服务器,B作为ssh客户端,其他不变

在B上配置一条命令

1
2
3
ssh  -R 12345:telnet-server:23  ssh -server -Nf
# -R表示远程端口转发
# 12345 表示B监听的远程机器A上的端口

在A上输入“telnet 127.0.0.1 12345”即可登陆telnet服务器,其工作原理如下:

  • A上telnet命令触发12345端口,同时一直监听此端口的B机器开始与A建立ssh连接;

余下的过程与“本地端口转发一样”

但是二者的区别是“本地端口转发”是ssh客户端监听本机的12345端口,然后主动与内网的ssh服务器建立连接;

“远程端口转发”则是外网的ssh服务器被动接受内网的ssh连接,因为主动方式被防火墙阻止了。

3、动态端口转发

网络结构:A-----[防火墙]-----ssh服务器B-----http服务器C

场景三:不允许外网用户直接访问http服务,但是ssh服务是允许的

在A上配置一条命令:

1
2
ssh  -D 1080 用户@ ssh -server
# -D 动态指定连接ssh服务的端口

在A上测试

1
2
curl --socks5 127.0.0.1 
# 默认1080端口,所以可以不写

A设置为本机代理,当访问1080端口,会与ssh服务器建立连接,然后再与http服务器建立连接

本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1965736



相关文章
|
4月前
|
Ubuntu Linux 网络安全
【计算机网络】SSH 服务安装
【1月更文挑战第10天】【计算机网络】SSH 服务安装
|
6月前
|
监控 数据可视化 安全
Linux——怎样使用SSH服务实现远程UI界面本地显示
需求场景 最近几天需要实现软件的远程监控,但是实际场景又不能使用向日葵、VNC、AnyDesk、以及其他的监视软件,并且软件的整体设计也没有这块的数据上行设计。
208 0
|
7月前
|
安全 Linux 网络安全
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
131 0
|
21天前
|
网络协议 安全 Shell
配置ssh服务
配置ssh服务
|
5月前
|
安全 Linux 网络安全
Linux加强篇009-使用ssh服务管理远程主机
山重水复疑无路,柳暗花明又一村
254 0
Linux加强篇009-使用ssh服务管理远程主机
|
5月前
|
Ubuntu 网络安全
Ubuntu 开启 SSH 服务
Ubuntu 开启 SSH 服务
|
5月前
|
安全 网络协议 Linux
哇~真的是你呀!今天是LINUX中的SSH服务
SSH(Secure Shell)是一种加密网络协议,用于远程登录和安全传输数据。在Linux系统中,SSH服务是一种常见的远程管理工具,允许用户通过安全的连接远程访问和控制Linux服务器。以下是关于Linux中SSH服务的一些重要信息.
51 0
|
6月前
|
网络安全 Windows
windows 搭建ssh服务
windows 搭建ssh服务
35 0
|
7月前
|
安全 网络安全
配置SSH服务远程连接空闲超时退出时间(包括SSH无法登录、登录缓慢)
配置SSH服务远程连接空闲超时退出时间(包括SSH无法登录、登录缓慢)
|
9月前
|
Ubuntu Shell 网络安全
Docker实用指令和搭SSH服务的实战
Docker实用指令和搭SSH服务的实战