sshd服务安装-ssh命令使用方法

本文涉及的产品
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
密钥管理服务KMS,1000个密钥,100个凭据,1个月
运维安全中心(堡垒机),免费版 6个月
简介: SSH协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。

SSHD服务



介绍:


SSH 协议:


安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。


作用:


sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件

相比较之前用telnet方式来传输文件要安全很多,因为telnet使用明文传输,是加密传输。

服务安装:


需要安装OpenSSH 四个安装包:


OpenSSH软件包,提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。


安装包:


OpenSSH服务需要4 个软件包
openssh-5.3p1-114.el6_7.x86_64:包含OpenSSH服务器及客户端需要的核心文件
openssh-clients-5.3p1-114.el6_7.x86_64:OpenSSH客户端软件包
openssh-server-5.3p1-114.el6_7.x86_64:OpenSSH服务器软件包
openssh-askpass-5.3p1-114.el6_7.x86_64:支持对话框窗口的显示,是一个基于X 系统的密码


这四个软件包在我们的RHEL镜像软件安装包里有。


[root@localhost ~]# ls /mnt/cdrom/Packages/openssh*  #自己的光盘挂载目录
/mnt/cdrom/Packages/openssh-7.4p1-11.el7.x86_64.rpm
/mnt/cdrom/Packages/openssh-askpass-7.4p1-11.el7.x86_64.rpm
/mnt/cdrom/Packages/openssh-clients-7.4p1-11.el7.x86_64.rpm
/mnt/cdrom/Packages/openssh-keycat-7.4p1-11.el7.x86_64.rpm
/mnt/cdrom/Packages/openssh-server-7.4p1-11.el7.x86_64.rpm
[root@localhost ~]# 


找到软件包存放位置之后,下面我们来安装软件包:


安装方法有两种:


配置yum源,通过


yum install openssh openssh-clients openssh-server -y
来安装
前提:系统以及配置好yum源,(本地源or网络源) 推荐用yum来安装


设置开机自动挂载系统镜像文件


echo“/dev/cdrom /media/cdrom iso9660 defaults 0 0”>>/etc/fstab

你的光驱设备 挂载点 挂载格式 默认 默认


本地直接安装rpm包文件:


rpm –ivh /media/cdrom/Packages/openssh*.rpm
可能需要解决依赖关系


查看软件安装生产的文件:


rpm –ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ssh-keysign
/usr/share/doc/openssh-5.3p1


OpenSSH配置文件


OpenSSH常用配置文件有两个/etc/ssh/ssh_config和/etc/sshd_config。
ssh_config为客户端配置文件
sshd_config为服务器端配置文件


服务启动关闭脚本:


[root@localhost ~]# systemctl stop|restart|start  sshd


开机启动服务:


[root@localhost ~]# chkconfig sshd on # 6版本
[root@localhost ~]# systemctl enable sshd # 7 版本
[root@localhost ~]# 


如何使用ssh来远程连接主机:



方法一、


ssh [远程主机用户名] @[远程服务器主机名或IP地址]:


[root@localhost ~]# ssh root@192.168.170.14
The authenticity of host '192.168.170.14 (192.168.170.14)' can't be established.
ECDSA key fingerprint is SHA256:nnfwBTJ/q92m4MGlb6HOdwbx0dJXCMAX1llYmqEADJI.
ECDSA key fingerprint is MD5:31:00:86:ea:c5:b8:9b:86:93:58:33:90:3f:50:9a:58.
Are you sure you want to continue connecting (yes/no)? yes  #这里输入yes
Warning: Permanently added '192.168.170.14' (ECDSA) to the list of known hosts.
root@192.168.170.14's password:   #这里输入你的密码
Last login: Fri Sep  6 22:07:09 2019 from 192.168.170.1
[root@localhost ~]# 


第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下

$HOME/.ssh/known_hosts文件中,下次再进行登录时因为保存有该主机信息就不会再提示了


RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。


方法二、


ssh -l [远程主机用户名] [远程服务器主机名或IP 地址]
[root@localhost ~]# ssh -l root 192.168.170.14
The authenticity of host '192.168.170.14 (192.168.170.14)' can't be established.
ECDSA key fingerprint is SHA256:nnfwBTJ/q92m4MGlb6HOdwbx0dJXCMAX1llYmqEADJI.
ECDSA key fingerprint is MD5:31:00:86:ea:c5:b8:9b:86:93:58:33:90:3f:50:9a:58.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.170.14' (ECDSA) to the list of known hosts.
root@192.168.170.14's password: 
Last login: Fri Sep  6 22:41:59 2019 from 192.168.170.13
[root@localhost ~]# 


1.3、sshd服务配置和管理


介绍下配置文件,以及需要安全调优的地方


注:参数前面有#,表示是默认值。 当然#号也表示注示。


/etc/ssh/sshd_config配置文件


设置sshd监听端口号
选择的 SSH 协议版本,可以是 1 也可以是 2  安全考虑,设置为最新的协议版本
#LogLevel INFO  # 登录记录的等级!INFO级别以上
LoginGraceTime 2m       #grace 优雅 登录超时时间
PermitRootLogin yes #是否允许 root 登入!预设是允许的,但是建议设定成 no !
真实的生产环境服务器,是不允许root账号直接登陆的!!!
PasswordAuthentication yes   # 密码验证当然是需要的!所以这里写 yes,也可以设置为no
 PrintMotd yes             # 登录提示,警告等
 PrintLastLog yes     # 显示上次登入的信息!预设也是 yes  !
UseDNS yes   #一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名
PermitEmptyPasswords no # 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no 


SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项目!


例如想要开放sshd端口为 22和222,则多加一行内容为: Port 222 即可


然后重新启动sshd这样就好了。 建议大家修改 port number 为其它端口。防止别人暴力破解。


修改完端口默认端口后,登录方法:


root@localhost ~]#  ssh -p 222 192.168.14
ListenAddress 0.0.0.0
设置sshd服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址
这个值可以写成本地IP地址也可以写成所有地址
#HostKey /etc/ssh/ssh_host_key
设置包含计算机私人密匙的文件
SyslogFacility AUTHPRIV 


当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV。


sshd服务日志存放在: /var/log/secure 。


SSHD服务防止暴力破解



防止暴力破解的方法有三种:


方法一、


配置安全的sshd服务
1、 密码足够的复杂,密码的长度要大于8位最好大于20位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成,
2、修改默认端口号
3 、不允许root账号直接登陆,添加普通账号,授予root的权限
互动:是否可以禁止root身份登录? 不行,因为有些程序需要使用root身份登录并运行。另外判断一个用户是不是超级管理员,看的是用户的ID是否为0。
4、不允许密码登陆,只能通过认证的秘钥来登陆系统


  • 通过密钥认证实现sshd认证


实验环境:


image.png


  • 客户端生成密钥对,然后把公钥传输到服务端


[root@client_13 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  #提示输入保存路径,一般默认
Enter passphrase (empty for no passphrase):  求输入密码,这里的passphrase 密码是对生成的私匙文件,下面要(/root/.ssh/id_dsa)
Enter same passphrase again:  在输入一次
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nmDdBbg/oR6hgAXuND4+fGup/pa7IDwPZzDJLf4flEQ root@client_13
The key's randomart image is:
+---[RSA 2048]----+
|  .. E   ..      |
| .  o   .  .     |
|  +o .   .  .    |
|.++.o ..o...     |
| *+. +o.S+..     |
|oo+....oo.o      |
|.==o.+ .o. .     |
| .B+=.. .        |
| .oB*+           |
+----[SHA256]-----+
[root@client_13 ~]# 
[root@client_13 ~]# cd /root/.ssh/           #查看生成的秘钥
[root@client_13 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts


  • 发布公钥到服务端:


使用ssh-copy-id 命令将客户端生成的公钥发布到远程服务器192.168.170.14


[root@client_13 .ssh]# ssh-copy-id -i 192.168.170.14
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.170.14's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.170.14'"
and check to make sure that only the key(s) you wanted were added.
[root@client_13 .ssh]# 


#这个时候可以通过ssh 无密钥直接登陆主机


[root@client_13 .ssh]# ssh -l root 192.168.170.14
Last login: Fri Sep  6 22:47:01 2019 from 192.168.170.14
[root@client_13 ~]# 


注意:如果服务器不是监听22端口,则需要这样传输密钥:


ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 222 root@192.168.0.63”


方法二:通过开源的防护软件来防护安全


简单、灵活、功能强大


实战背景:


最近公网网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。


fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!


#ban (bæn)禁令


简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。


注:重启iptables服务的话,所有DORP将重置。


下载软件包: 
官方地址:
http://www.fail2ban.org
http://www.fail2ban.org/wiki/index.php/Downloads


HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥


HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥


注:


RSA 是一种非对称加解密算法。


RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);


DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。


公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。


ServerKeyBits 1024 #定义服务器密匙长度


安装:


互动这个陌生的软件包如何安装?


解压查看readme文件


 [root@localhost  ~]#tar  -zxvf fail2ban-0.8.14.tar.gz
[ root@localhost fail2ban-0.8.14]# vim README.md  #查看以下内容

需要安装python开发环境,并且版本要大于2.4


查看当前系统中python的版本:


[root@localhost fail2ban-0.8.14]# python -V
Python 2.6.6
安装:
 [root@server_14 ~]#cd fail2ban-0.8.14
[root@loaclhost fail2ban-0.8.14]#python setup.py install


相关主要文件说明:


/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置


/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置


/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置


/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值


  • jail [dʒeɪl]监狱


生成服务启动脚本:
[root@localhost fail2ban-0.8.14]# pwd
/root/fail2ban-0.8.14
[root@localhost fail2ban-0.8.14]# cp files/redhat-initd /etc/rc.d/init.d/fail2ban   
[root@localhost fail2ban-0.8.14]#chkconfig --add fail2ban  #开机自动启动


互动: 你怎么知道要复制这个文件? 一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?


这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。


[root@localhost fail2ban-0.8.14]# grep chkconfig ./* -R --color
./files/redhat-initd:# chkconfig: - 92 08


启动脚本里都包含chkconfig 字段


应用实例


设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。


因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。


实例文件/etc/fail2ban/jail.conf及说明如下:


[DEFAULT]               #全局设置
ignoreip = 127.0.0.1/8       #忽略的IP列表,不受设置限制
bantime  = 600             #屏蔽时间,单位:秒
findtime  = 600             #这个时间段内超过规定次数会被ban掉
maxretry = 3                #最大尝试次数
backend = auto            #日志修改检测机制(gamin、polling和auto这三种)
[ssh-iptables]               #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
enabled  = true             #是否激活此项(true/false)修改成 true
filter   = sshd              #过滤规则filter的名字,对应filter.d目录下的sshd.conf
action   = iptables[name=SSH, port=ssh, protocol=tcp]             #动作的相关参数,对应action.d/iptables.conf文件
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.c
om, sendername="Fail2Ban"]#触发报警的收件人
logpath  = /var/log/secure   #检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath  = /var/log/sshd.log
#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
bantime  = 3600   #禁止用户IP访问主机1小时
findtime  = 300    #在5分钟内内出现规定次数就开始工作
maxretry = 3    #3次密码验证失败


启动服务:


[root@localhost fail2ban-0.8.14]# systemctl start fail2ban 
[root@localhost fail2ban-0.8.14]# systemctl enable fail2ban 


测试:


[root@localhost fail2ban]# > /var/log/secure  #清日志。 从现在开始
[root@loaclhost fail2ban]# systemctl restart fail2ban
Stopping fail2ban:                                         [  OK  ]
Starting fail2ban:                                         [  OK  ]
[root@localhost  fail2ban]# iptables -L -n
 会多生成一个规则链。
测试:故意输入错误密码3次,再进行登录时,会拒绝登录
[root@localhost ~]# ssh 192.168.170.14
root@192.168.170.14's password: 
Permission denied, please try again.
root@192.168.170.14's password: 
Permission denied, please try again.
root@192.168.170.14's password: 
Permission denied (publickey,password).
[root@xuegod64 ~]# ssh 192.168.170.14
ssh: connect to host 192.168.170.14 port 22: Connection refused
[root@www.linuxidc.com ~]# iptables -L |tail -4
Chain fail2ban-SSH (1 references)
target     prot opt source               destination
DROP       all  --  192.168.7.142        anywhere
RETURN     all  --  anywhere             anywhere


需要注意的四点:


1、如果做错了,想清空一下记录,还原:


只需要把 > /var/log/secure 清空就可以了。


service fail2ban restart


2、另外如果后期需要把iptables清空后或iptables重启后,也需要把fail2ban重启一下。


3、如果修改ssh默认端口22为2015后 。 配置fail2ban来监控sshd服务


需要修改配置文件:


[root@xuegod63 fail2ban]# vim jail.conf


#修改iptables动作中的端口号。 默认为ssh。


改:port=ssh 为 port=2015


[root@xuegod63 fail2ban]# vim /etc/fail2ban/action.d/iptables.conf #修改动作文件中默认端口号。 改: port=ssh 为port=2015


重启服务即可


4、如果想要使用fail2ban发送告警邮件,请确保系统的邮件服务能够正常发送邮件!


可以发一封测试邮件到指定邮箱来测试下:


echo “test mail”|mail -s test wyh@qq.com


补充:


1、通过shell脚本来防止暴力破解ssh


通过自定义的shell脚本来防护安全


2、通过pam 模块来防止暴力破解ssh


[root@xuegod63 ~]# vim /etc/pam.d/sshd
在第一行下面添加一行:
auth    required    pam_tally2.so    deny=3    unlock_time=600 even_deny_root root_unlock_time=1200


说明:尝试登陆失败超过3次,普通用户600秒解锁,root用户1200秒解锁


手动解除锁定:


查看某一用户错误登陆次数:


pam_tally –-user


例如,查看work用户的错误登陆次数:


pam_tally –-user work


清空某一用户错误登陆次数:


pam_tally –-user –-reset


例如,清空 work 用户的错误登陆次数,


pam_tally –-user work –-reset


3、denyhosts 软件防护


当我们的服务器对外提供服务的时候,难免的会受到其他用户的扫描和试图登录的操作,以侵入服务器,这样不仅会浪费系统的资源,有可能还会被其他用户进行N多次尝试后登录系统,对系统造成破坏影响业务系统的正常运行。DenyHosts是一个使用python编写的脚本文件,通过运行这个脚本(可以通过命令行运行、计划任务或者是作为服务运行)可以有效的阻止对SSH服务器的攻击。DenyHosts具有如下特性:


 1.对/var/log/secure日志文件进行分析,查找所有的登录尝试,并且过滤出失败和成功的尝试。


 2.记录下所有失败的登录尝试的用户名和主机,如果超过阀值,则记录主机。


 3.保持对每一个登录失败的用户(存在系统中或不存在系统中的用户)的跟踪


 4.对每一个可疑的登录进行跟踪。(虽然登录成功,但是有很多次登录失败的记录)


 5.将可疑地址的主机加入到/etc/hosts.deny文件中。


总结:


1.1、学习Linux服务前期环境准备、搭建一个RHEL7环境


1.2、sshd服务安装-ssh命令使用方法


1.3、sshd服务配置和管理


1.4、防止SSHD服务暴力破解的几种方式


相关文章
|
3月前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
295 6
|
16天前
|
安全 Linux Shell
ssh 远程控制服务
SSH(Secure Shell)是一种用于远程登录的安全协议,相比FTP和Telnet,它提供了更高的安全性,避免了明文传输带来的风险。要使用SSH远程管理Linux系统,需要配置sshd服务。本文介绍了如何克隆Linux服务器、修改网络配置,并通过SSH连接两台服务器,最后在目标服务器上创建一个日志文件。
31 4
|
1月前
|
网络安全
Ubuntu14.04安装ssh服务器
Ubuntu14.04安装ssh服务器
52 0
|
3月前
|
网络安全 Windows
在Windows电脑上启动并配置SSH服务
在Windows电脑上启动并配置SSH服务
754 0
|
3月前
|
网络安全 Windows
windows安装ssh服务
windows安装ssh服务
38 0
|
3月前
|
安全 Linux 网络安全
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?
|
3月前
|
安全 Linux Shell
SSH 命令完整实用指南 | Linux SSH 服务
【8月更文挑战第20天】
434 0
|
18天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
5月前
|
安全 Linux Shell
Linux中SSH命令介绍
Linux中SSH命令介绍
141 2
下一篇
无影云桌面