openssh 详解
目录
之前在telnet和ssh相关问题的文章中有写到过openssh,这里在详细介绍下openssh
openssh简介
OpenSSH用于在远程系统上安全运行shell。如果在可提供ssh服务的远程Linux系统中拥有用户帐户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行命令。在服务端,每一次启动sshd服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,如果系统刚刚安装完成,则没有公钥信息,sshd会主动计算出自己的公钥和私钥。
openssh是基于C/S(客户端/服务器)工作的模式,它又两种认证方式:口令认证 and 密钥对认证
口令认证
以服务器中本地系统用户的登录名称、密码进行验证。从客户机的角度看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举攻击时防御能力较弱。
- client端向server端发去连接请求
- server接受请求并向client端发送自己的主机公钥
- client输入密码,并使用server端公钥加密后发送给server(敏感信息安全传输)
- server接受加密的密码,使用私钥解密,匹配认证密码是否合法。合法则登录成功。
密钥对认证
首先客户端上的用户会在客户端生成一对密钥,并将自己的公钥上传到远程服务器上面(一般在对应用户的home目录下),自己保留私钥信息,之后在我们使用ssh命令远程登录服务器的时候,只需要我们输入远程服务器上面对应的用户名,而不需要再输入密码就可以进行登录。
- 客户端生成一对密钥,并将公钥上传至服务端(~/.ssh/authorized_keys)
- 客户端请求连接,包含主机名和当前用户
- 服务端从authorized_keys中查找是否有用户信息,如果有则向客户端发送一段随机字符串,并用客户端的公钥进行加密
- 客户端用自己的私钥对随机字符串进行解密,并返还给服务端
- 服务端将解密后的字符串与之前发送的字符串进行比对,如一致则验证通过。
公钥(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
更多推荐
所有评论(0)