openssh 详解


之前在telnet和ssh相关问题的文章中有写到过openssh,这里在详细介绍下openssh

openssh简介

OpenSSH用于在远程系统上安全运行shell。如果在可提供ssh服务的远程Linux系统中拥有用户帐户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行命令。在服务端,每一次启动sshd服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,如果系统刚刚安装完成,则没有公钥信息,sshd会主动计算出自己的公钥和私钥。
openssh是基于C/S(客户端/服务器)工作的模式,它又两种认证方式:口令认证 and 密钥对认证

口令认证

以服务器中本地系统用户的登录名称、密码进行验证。从客户机的角度看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举攻击时防御能力较弱。
在这里插入图片描述

  1. client端向server端发去连接请求
  2. server接受请求并向client端发送自己的主机公钥
  3. client输入密码,并使用server端公钥加密后发送给server(敏感信息安全传输)
  4. server接受加密的密码,使用私钥解密,匹配认证密码是否合法。合法则登录成功。

密钥对认证

首先客户端上的用户会在客户端生成一对密钥,并将自己的公钥上传到远程服务器上面(一般在对应用户的home目录下),自己保留私钥信息,之后在我们使用ssh命令远程登录服务器的时候,只需要我们输入远程服务器上面对应的用户名,而不需要再输入密码就可以进行登录。
在这里插入图片描述

  1. 客户端生成一对密钥,并将公钥上传至服务端(~/.ssh/authorized_keys)
  2. 客户端请求连接,包含主机名和当前用户
  3. 服务端从authorized_keys中查找是否有用户信息,如果有则向客户端发送一段随机字符串,并用客户端的公钥进行加密
  4. 客户端用自己的私钥对随机字符串进行解密,并返还给服务端
  5. 服务端将解密后的字符串与之前发送的字符串进行比对,如一致则验证通过。

公钥(Public Key)与私钥(Privtae Key)的关系
公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。
不能根据一个密钥来推算出另一个密钥。
公钥对外公开,私钥只有私钥的持有人才知道。
公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

如何保证信息传输安全?

(1)服务器到客户端
服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密
(2)客户端到服务器
客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密

sshd(服务端)配置文件解释

服务脚本:/etc/rc.d/init.d/sshd
主配置文件:vim /etc/ssh/sshd_config

# Port 22  #默认端口,也可以使用多个端口
Protocol 2 #协议版本号
# ListenAddress 0.0.0.0 #默认值是监听所有接口的 SSH 要求
# PidFile /var/run/sshd.pid #放置 SSHD 这个 PID 的文件
# LoginGraceTime 2m #2分钟之内不输入密码,自动断开
# Compression delayed  #使用压缩数据模式进行传输,登入后才将数据压缩 (delayed)
安全设置
# PermitRootLogin yes #是否允许 root 登入
# StrictModes yes #是否让 sshd 去检查用户家目录或相关文件的权限数据
# PubkeyAuthentication yes #使用密钥登录系统
# AuthorizedKeysFile .ssh/authorized_keys #用户登录公钥存放位置
PasswordAuthentication yes #登录密码认证
# PermitEmptyPasswords no #否允许以空的密码登入
# RhostsAuthentication no #系统不使用 .rhosts认证
# IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 来做为认证
# RhostsRSAAuthentication no #专门给 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv
# HostbasedAuthentication no #上面的项目类似,不过是给 version 2 使用的
# IgnoreUserKnownHosts no #是否忽略家目录内的 ~/.ssh/known_hosts
ChallengeResponseAuthentication no #允许任何的密码认证
UsePAM yes #利用 PAM 管理使用者认证,可以记录与管理
登录后项目
# PrintMotd yes #登入后是否显示出一些信息
# PrintLastLog yes #显示上次登入的信息
# TCPKeepAlive yes #当达成联机后,服务器会一直传送 TCP 封包给客户端以判断对方式否一直存在联机
UsePrivilegeSeparation yes #是否权限较低的程序来提供用户操作
MaxStartups 10 #同时允许几个尚未登入的联机画面
DenyUsers * #设定受阻止的使用者名称
DenyUsers test  #阻止用户
DenyGroups test #阻止组

主要私有key存放文件/etc/ssh /
在这里插入图片描述
日志存放路径/var/log/secure
在这里插入图片描述

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

客户端配置文件是登录别人主机ssh时使用的

#Host *        //表示连接所有主机
#Port 22        //默认连接端口
#Cipher 3des        //加密时使用的加密机制
#StrictHostKeyChecking ask    //严格的主机秘钥检查 即第一次连接时是否询问

使用口令登录ssh

[root@localhost ~]# vim /etc/ssh/sshd_config 

启用口令验证
在这里插入图片描述

[root@localhost ~]# systemctl restart sshd #重启服务
[root@localhost ~]# ssh boy@172.20.10.12 #以boy用户登录远程主机

在这里插入图片描述
服务器默认端口为22,如果更改了默认端口,则需要使用-p参数指定端口号

[root@localhost ~]# ssh -p 2345 boy@172.20.10.12

scp远程复制

使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。
将远程主机的/etc/passwd文件复制到本机

[root@localhost ~]# scp boy@172.20.10.12:/etc/passwd /home/pwd.txt

在这里插入图片描述
将本机的/var/log/复制到远程主机

[root@localhost ~]# scp -r /var/log boy@172.20.10.12: /home

在这里插入图片描述

sftp安全ftp

通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,便于目录资源管理。
sftp远程登录

[root@localhost ~]# sftp boy@172.20.10.12

在这里插入图片描述

使用密钥对验证登录

在客户端创建密钥对

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  #指定私钥存放位置
Enter passphrase (empty for no passphrase): #设置私钥短语 
Enter same passphrase again:  #确认私钥短语

将公钥上传至服务器

[root@localhost ~]# scp .ssh/id_rsa.pub root@172.20.10.12: /tmp/

在服务器中导入公钥文本

[root@localhost ~]# mkdir -p /home/boy/.ssh
[root@localhost ~]# cat /tmp/id_rsa.pub >> /home/boy/.ssh/authorized_keys

配置sshd_config文件允许密钥对访问

PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

在这里插入图片描述
重启服务

[root@localhost ~]# systemctl restart sshd

客户端使用密钥对登录

[root@localhost ~]# ssh boy@172.20.10.12

在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值