Linux_SSH服务应用

12 篇文章 2 订阅 ¥9.90 ¥99.00

目录

简介

SSH服务安装

SSH配置文件

cp

SSH登录系统

基于密码的安全验证

基于密匙的安全验证

scp

SSH命令参数

SSH隐身登录

SSH端口转发

本地转发

SSH日志信息

SSH暴力破解

声明 

结语


简介

SSH是 "Secure Shell" 的缩写,是建立在应用层和传输层基础上的一种安全协议,方便跨平台访问,常用于Linux服务器远程加密登录,同时可以借助ssh协议来传输数据,提供更安全的SFTP服务。

SSH服务安装

查看openssh安装情况:

rpm -qa openssh*

如果不存在的话需要先进行安装

安装

Centos系列运行命令安装:

yum install -y openssh

yum install openssh-server -y

yum install openssh*

当然,安装软件操作需要root权限运行

Debian系列运行命令安装:

apt-get install openssh-server

apt-get install openssh*

SSH配置文件

安装完成后配置文件路径在:

/etc/ssh/

ls /etc/ssh  #查看

这里有两个配置文件需要区分一下:

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

/etc/ssh/sshd_config  #ssh服务端配置文件

通常需要配置的就是 '/etc/ssh/sshd_config' 文件

最后在改动之前进行一下备份

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

cp

cp命令用于复制文件

常用参数:

-a   #复制目录时使用,保留链接、文件属性,并复制目录下的所有内容

-d   #复制时保留链接。相当于 Windows 系统的快捷方式

-f    #覆盖已经存在的目标文件而不给出提示

-i    #覆盖目标文件之前给出提示,要求用户确认是否覆盖

-p   #除复制文件的内容外,同时复制时间和访问权限到新文件

-r    #若源文件是一个目录文件,将复制该目录下所有的子目录和文件

-l    #不复制文件,只生成链接文件

sshd_config文件内容:

Port 22     #监听端口,默认22,可随意更改

#AddressFamily any       #IPV4和IPV6协议使用,any表示二者同时使用

ListenAddress 0.0.0.0     #IPV4,0.0.0.0表示本机的所有地址

#ListenAddress ::            #IPV6

PermitRootLogin yes                            #允许管理员登录,yes允许,no拒绝

PermitEmptyPasswords no                  #是否允许空密码用户登录
PasswordAuthentication yes                #是否允许基于密码登录

SSH登录系统

SSH提供基于口令(密码)的安全验证和基于密匙的安全验证方式。

基于密码的安全验证


只要你知道自己帐号和对应的密码,就可以通过ssh服务登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,比如蜜罐。

比如这里我这里使用用户名 'root' ,密码 'root' ,登录cnentos:

没有做过多限制的话,只有用户名和密码正确即可通过ssh服务登录。

-l    #登录的用户名

-p   #连接的端口

基于密匙的安全验证


将自己的公钥储存在远程主机上,登录的时候远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不用在输入密码即可成功登录到系统。

sshd_config配置文件需要配置:

PubkeyAuthentication yes                              #公钥验证开启
AuthorizedKeysFile    .ssh/authorized_keys  #私钥文件路径,公钥发给客户端

PasswordAuthentication no                           #禁用密码验证登录

首先生成一个秘钥文件

ssh-keygen 

这里我是在本地windows中生成的所以是 'ssh-keygen.exe'

中间不用输入使用默认即可

id_rsa           #私钥

id_rsa.pub    #公钥

然后将本机的公钥文件复制到远程机器的用户家目录下保存到 '.ssh/authorized_keys' 文件中

这里我是直接使用的ssh终端软件将id_rsa.pub文件进行的sftp文件传输到ssh服务主机的root家目录下 

因为这里没有 ‘.ssh’ 文件夹,所以这里先新建了一个

随后将 'id_rsa.pub' 文件中的内容保存为 '.ssh' 文件夹下的 'authorized_keys'

然后重启了一下ssh服务

最后运行命令验证秘钥后没有输入用户密码直接登录到了ssh服务主机

当然,这里我没有更改任何的文件夹及文件的权限,至于网上很多说需要更改 '.ssh' 权限的设置自己可以去尝试一下:

chmod 700 .ssh

chmod 600 .ssh/authorized_keys

在说明一下,这里我是在windows主机上传输文件到linux主机,如果直接两台linux主机上进行文件传输可以使用scp命令,当然windows上也支持scp命令,但是好像只能使用ssh服务的默认22端口,我这里是映射出来的端口在2222,进过尝试无法完成,所以采用sftp直接上传文件了

scp

scp:'secure copy'  ,命令是 linux 系统下基于 ssh 登陆进行安全的远程复制文件和目录命令。

常用参数:

  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -q: 不显示传输进度条
  • -r: 递归复制整个目录
  • -v:详细方式显示输出
  • -P port:大写的P, port是指定数据传输用到的端口号

SSH命令参数

ssh  user@]host [command]

ssh 192.168.217.128

#windows命令行中不加用户名默认使用当前系统用户名

#linux中不假用户名默认使用root用户

参数:

-b      #指定连接的源IP

-g      #允许远程主机连接主机的转发端口

-i       #指定私钥文件

-l       #指定连接远程服务器登录用户名

-N     #不执行远程指令

-p      #指定远程服务器上的端口

-q      #静默模式

-X     #开启X11转发功能

-x     #关闭X11转发功能

-t      #不分配伪终端

SSH隐身登录

ssh -T root@192.168.217.128 /bin/bash -i

-T  #不分配伪终端
-i   #bash的参数,表示交互式shell

这里以kali为例:

目前只打开了一个终端 

通过windows使用ssh添加一个会话后

使用 'w' 和 'who' 命令查看当前已经多出来一个用户在线

尝试运行命令:

ssh ling@192.168.217.128 -T /bin/bash -i

此时在运行 'w' 和 'who' 命令但是没有检测出新加入的ssh连接从而达到隐身登录的目的。

SSH端口转发

SSH能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务。SSH为其他TCP链接提供了一个安全的通道来进行传输,如果工作环境许中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,那么就能够将通过ssh将TCP用端口转发来使用SSH进行通讯。

-L     #本地转发

-R    #远程转发

-f      #后台启用
-N    #不打开远程shell(不加-N则直接登录进去)
-g     #启用网关功能

本地转发

ssh -L 本地端口:连接主机:连接主机端口 转发的主机

ssh -L 8888:192.168.217.128:22 192.168.217.128

将本地8888端口通过192.168.217.128转发至192.168.217.128主机的22端口

运行命令之后本机和192.168.217.128主机建立了一个tcp连接用于转发

这时候在本地从新打开一个终端并尝试运行ssh命令连接本地8888端口

ssh 127.0.0.1 -p 8888 -l root 

这个时候连接上的同样是kali主机

SSH日志信息

cat /var/log/auth.log                            #ubuntu
cat /var/log/secure                              #centos

cat /var/log/auth.log |grep "Accept"    #登录成功的日志

cat /var/log/auth.log |grep "pam_unix(sshd:session): session closed"     #正常退出的日志

cat /var/log/auth.log | grep "Failed password for"                                     #登录失败日志

sudo grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?)from/; print"$1\n";}'|sort|uniq -c|sort -nr         

#统计登录失败的用户名及次数

sudo cat /var/log/auth.log | grep "Failed password for" |grep "root" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}'|sort|uniq -c|sort -nr 

#统计登录者的Ip和次数(这里用的是root)

cat /var/log/auth.log | grep "Failed password for"| grep "invalid" | cut -d " " -f 11 | sort | uniq -c | sort -nr 

#统计不存在的用户名及错误登录次数

SSH暴力破解

hydra -L users.txt -P password.txt -t 5 -vV -o ssh.txt -e ns 192.168.217.128 ssh

hydra -L user.txt -P pass.txt -t 20 -vV ssh://192.168.217.128

声明 

提供的技术仅供学习参考测试,利用本文提供的信息造成的直接或间接损失由使用者自行承担。


结语

对未来真正的慷慨,是把一切献给现在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheng-Ling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值