当前位置:首页 » 编程语言 » pythonssh破解

pythonssh破解

发布时间: 2022-12-23 14:23:16

① ssh暴力破解的后果

对服务器性能是会有一些影响,但最大的影响是你的服务器root密码被破解,被完全控制。

ssh攻击的目的就是暴力破解你的密码。最直接的影响就是设备瘫痪(服务器死机)

SSH暴力破解是指攻击者通过密码字典或随机组合密码的方式尝试登陆服务器(针对的是全网机器),这种攻击行为一般不会有明确攻击目标,多数是通过扫描软件直接扫描整个广播域或网段。

怎样防御暴力破解攻击?

一:系统及网络安全

1、定期检查并修复系统漏洞

2、定期修改SSH密码,或配置证书登陆

3、修改SSH端口

4、禁Ping

5、若你长期不需要登陆SSH,请在面板中将SSH服务关闭

6、安装悬镜、云锁、安全狗等安全软件(只安装一个)

linux SSH异地登录安全提醒功能

这个功能确实很实用。
对于不能实时收邮件的同志来说
如果能发手机短信通知就更好了。

③ Denyhost防止SSH暴力破解

Denyhost安装:

wget https://netix.dl.sourceforge.net/project/denyhosts/denyhosts/2.10/denyhosts-2.10.tar.gz

tar -xzf DenyHosts-2.10.tar.gz
cd DenyHosts-2.10
python setup.py install
Denyhost配置及运行:

cp denyhosts.cfg-dist denyhosts.cfg

cp daemon-control-dist daemon-control
chmod 700 daemon-control

./daemon-control start

Denyhost效果:

从Denyhost的运行日志中看出,对目标主机的多次SSH密码试错触发了Denyhost的防御功能。攻击者的IP被添加至hosts.deny文件,该IP下的SSH访问也被拒止。

ping不通,ssh不上!!!!效果刚刚的!!

恢复过程:

1.关闭停止denyhost

/data/software/denyhosts-2.10/daemon-control stop

2.将

/var/log/secure

/etc/hosts.deny

/data/denyhosts-data/* 这个3个下的所有文件的相关ip清除掉

3.清空防火墙规则:

iptables -F

4.重启rsyslog

systemctl restart rsyslog

5.启动denyhost

/data/software/denyhosts-2.10/daemon-control start

④ 纯干货!python 在运维中的应用 (一):批量 ssh/sftp

日常工作中需要大量、频繁地使用ssh到服务器查看、拉取相关的信息或者对服务器进行变更。目前公司大量使用的shell,但是随着逻辑的复杂化、脚本管理的精细化,shell已经不满足日常需求,于是我尝试整合工作中的需求,制作适合的工具。 由于管理制度的缺陷,我以工作流程为核心思考适合自己的运维方式,提升工作效率,把时间留给更有价值的事情。 完整代码在最后,请大家参考。

生产:4000+物理服务器,近 3000 台虚拟机。

开发环境:python3.6、redhat7.9,除了paramiko为第三方模块需要自己安装,其他的直接import即可。

批量执行操作是一把双刃剑。批量执行操作可以提升工作效率,但是随之而来的风险不可忽略。

风险案例如下:

挂载很多数据盘,通常先格式化硬盘,再挂载数据盘,最后再写入将开机挂载信息写入/etc/fstab文件。在批量lsblk检查硬盘信息的时候发现有的系统盘在/sda有的在/sdm,如果不事先检查机器相关配置是否一致直接按照工作经验去执行批量操作,会很容易造成个人难以承受的灾难。

在执行批量操作时按照惯例:格式化硬盘->挂载->开机挂载的顺序去执行,假设有的机器因为某些故障导致格式化硬盘没法正确执行。在处理这类问题的时候通常会先提取出失败的ip,并再按照惯例执行操作。运维人员会很容易忽略开机挂载的信息已经写过了,导致复写(这都是血和泪的教训)。

所以,为了避免故障,提升工作效率,我认为应当建立团队在工作上的共识,应当遵守以下原则:

当然,代码的规范也应当重视起来,不仅是为了便于审计,同时也需要便于溯源。我认为应当注意以下几点:

1、ssh no existing session,sftp超时时间设置:

在代码无错的情况下大量ip出现No existing session,排查后定位在代码的写法上,下面是一个正确的示例。由于最开始没考虑到ssh连接的几种情况导致了重写好几遍。另外sftp的实例貌似不能直接设置连接超时时间,所以我采用了先建立ssh连接再打开sftp的方法。

2、sftp中的get()和put()方法仅能传文件,不支持直接传目录:

不能直接传目录,那换个思路,遍历路径中的目录和文件,先创建目录再传文件就能达到一样的效果了。在paramiko的sftp中sftp.listdir_attr()方法可以获取远程路径中的文件、目录信息。那么我们可以写一个递归来遍历远程路径中的所有文件和目录(传入一个列表是为了接收递归返回的值)。

python自带的os模块中的os.walk()方法可以遍历到本地路径中的目录和文件。

3、多线程多个ip使用sftp.get()方法时无法并发。

改成多进程即可。

4、多个ip需要执行相同命令或不同的命令。

由于是日常使用的场景不会很复杂,所以借鉴了ansible的playbook,读取提前准备好的配置文件即可,然后再整合到之前定义的ssh函数中。


同时,我们还衍生出一个需求,既然都要读取配置,那同样也可以提前把ip地址准备在文件里。正好也能读取我们返回的执行程序的结果。

参数说明:

密码认证:

公钥认证:

可以配合 grep,awk 等命令精准过滤。

个人认为 Python 在初中级运维工作中的性质更像是工具,以提升工作效率、减少管理成本为主。可以从当前繁琐的工作中解脱出来,去 探索 更有价值的事情。python 本质上并不会减少故障的产生,所以在不同的阶段合理利用自身掌握的知识解决当前最重要的痛点,千万不要本末倒置。

⑤ python脚本ssh命令行可以登录并执行相应命令,但是脚本总是报错,何解

编辑“/usr/local/python269/lib/python2.6/site-packages/pexpect/__init__.py
”,将“ raise EOF(str(err) + '\n' + str(self))”这段代码注释掉,程序正常运行

有些 UNIX 平台,当你读取一个处于 EOF 状态的文件描述符时,会抛出异常,注释掉就可以了

⑥ python如何通过串口SSH登录服务器

需要写一个基于串口通信协议的ssh服务器和客户端,服务器部署到linux上,客户端在windows上;
其次,客户端要提供sdk for python;
最后,你就可以用python通过ssh登录linux了。

⑦ 如何用python开发一个ssh客户端工具


1)通过paramiko的ssh模块连接指定主机;

2)通过SSHClient.exec_command在远程主机上执行命令;

3)通过exec_command返回的stdout,stdin,stderr进行交互;

4)保存成功连接的主机信息(session),可以通过ls命令查看,sessionid命令,直接启动新连接;

5)可在windows和linux下运行,写程序时需要注意他们的差别。
代码ssh.py

#!/usr/bin/python
#-*-coding:utf-8-*-

importos,sys
importparamiko
importthreading
importplatform

curr_ssh=None
curr_prompt=">>"

#使用说明
defprintUsage():
print"!ls:listsessions."
print"!sessionid:connectsession."
print"!connhostuserpassword:connecthostwithuser."
print"!exit:exit."

#连接
defconn(ip,username,passwd):
try:
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
print"Connectto",ip,"with",username
globalcurr_prompt
curr_prompt=username+"@"+ip+">>"
returnssh
except:
returnNone

#加载以前的连接信息
sessions=[]
defloadSessions():
globalsessions
try:
f=open("sessions")
sessions=f.readlines()
f.close()
except:
pass

#执行本地命令,ssh.py的命令
defexe_cmd_local(cmd):
if(cmd=="!ls"):
loadSessions()
globalsessions
i=0
print"Sessions:"
forsinsessions:
print"[%d]%s"%(i,s)
i+=1
else:
vals=cmd.split('')
if(vals[0]=="!session"):
id=(int)(vals[1])
if(id<len(sessions)):os_name="platform.system()"new_console_cmd=""if(os_name="=""linux"):="".=""ssh.py="""=""+=""sessions[id]+"""=""elif(os_name="=""windows"):=""sessions[id]=""os.system(new_console_cmd)=""else:=""print="""didn't=""hava=""sessoin=""",vals[1]=""elif(vals[0]="="!conn"):"global=""curr_ssh=""f="open("sessions","a")"line="vals[1]+"""+vals[2]+"="""+vals[3]+" "=""f.write(line)=""f.close()=""#在ssh连接的主机上执行命令=""def=""exe_cmd_ssh(ssh,cmd):=""if(ssh="="none):=""connect=""to=""a=""server.=""use=""'!conn'=""please."=""return=""stdin,=""stdout,=""stderr="ssh.exec_command(cmd)"#stdin.write("y")=""#简单交互,输入=""‘y’=""#屏幕输出=""stdout.read()=""stderr.read()=""#入口函数=""if=""__name__="='__main__':"loadsessions()=""if(len(sys.argv)="=4):"printusage()=""while=""true:=""cmd="raw_input(curr_prompt)"if(len(cmd)="=0):"continue=""if(cmd="=""!exit"):=""if(curr_ssh=""!="None):"curr_ssh.close();=""break=""if(cmd[0]="="'!'):=""exe_cmd_local(cmd)=""exe_cmd_ssh(curr_ssh,cmd)<=""pre="">

⑧ 如何防止SSH暴力破解

SSH防暴力破解的解决方法:

1、禁止root用户ssh登陆;

1.1、修改PermitRootLogin项:

  • [root@localhost~]#vi/etc/ssh/sshd_config

  • [root@localhost~]#grepRoot/etc/ssh/sshd_config

  • PermitRootLoginno###将默认的#PermitRootLoginyes修改成这样的###

  • #thesettingof"PermitRootLoginwithout-password".

  • [root@localhost ~]# vi /etc/ssh/sshd_config

  • [root@localhost ~]# grep Root /etc/ssh/sshd_config

  • PermitRootLogin no ### 将默认的 #PermitRootLogin yes 修改成这样的 ###

  • # the setting of "PermitRootLogin without-password".

  • 1.2、重启sshd服务

  • Stoppingsshd:[OK]

  • Startingsshd:[OK]

  • Stopping sshd: [ OK ]

  • Starting sshd: [ OK ]

  • 2、修改ssh默认端口22;

    2.1、将默认端口22修改为自定义的2020端口

  • [root@localhost~]#vi/etc/ssh/sshd_config

  • [root@localhost~]#grepPort/etc/ssh/sshd_config

  • Port2020

  • #GatewayPortsno

  • [root@localhost ~]# vi /etc/ssh/sshd_config

  • [root@localhost ~]# grep Port /etc/ssh/sshd_config

  • Port 2020

  • #GatewayPorts no

  • 2.2、在防火墙中加入2020端口的策略

  • [root@localhost~]#vi/etc/sysconfig/iptables

  • [root@localhost~]#grep2020/etc/sysconfig/iptables

  • -AINPUT-ptcp-mstate--stateNEW-mtcp--dport2020-jACCEPT

  • [root@localhost ~]# vi /etc/sysconfig/iptables

  • [root@localhost ~]# grep 2020 /etc/sysconfig/iptables

  • -A INPUT -p tcp -m state --state NEW -m tcp --dport 2020 -j ACCEPT

  • 2.3、重启防火墙策略

  • [root@localhost~]#/etc/init.d/iptablesrestart

  • iptables:SettingchainstopolicyACCEPT:natfilter[OK]

  • iptables:Flushingfirewallrules:[OK]

  • iptables:Unloadingmoles:[OK]

  • iptables:Applyingfirewallrules:[OK]

  • [root@localhost ~]# /etc/init.d/iptables restart

  • iptables: Setting chains to policy ACCEPT: nat filter [ OK ]

  • iptables: Flushing firewall rules: [ OK ]

  • iptables: Unloading moles: [ OK ]

  • iptables: Applying firewall rules: [ OK ]

  • 2.4、重启sshd服务

  • [root@localhost~]#/etc/init.d/sshdrestart

  • Stoppingsshd:[OK]

  • Startingsshd:[OK]

⑨ 云主机被ssh暴力破解

刚刚买的云主机收到告警:【SSH暴力破解】,一开始没理会,后面发现这几个IP还经常来试。
这样放着也不是办法。
就简单的做了一些限制:

没加入黑名单的IP 会 【>> /etc/sshd.deny.hostguard】,已经加入的返回 【echo "ip:$i is in deny"】

测试:
找一台机器ssh你的公网IP
ssh 110.110.110.100 (本机公网IP) 默认22 直接报错不通:
ssh 110.110.110.100 (本机公网IP) -p 6666 (修改的ssh端口)

121.52.252.24 刚刚脚本触发的IP
119.8.55.100 (之前触发的)
159.138.53.153 (之前触发的)

⑩ python 实现ssh的执行远端命令和scp的不同机器文件传输功能

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret

利用pexpect模块我们可以做很多事情,由于他提供了自动交互功能,因此我们可以实现ftp,telnet,ssh,scp等的自动登录,还是比较实用的。根据上面的代码相信读者已经知道怎么实现了(python就是那么简单!)。

上面的代码去完成任务还是比较费时间的,因为程序要等待自动交互出现,另外ubuntu用ssh连接就是比较慢,要进行一系列的验证,这样才体现出ssh
的安全。我们要提高效率,在最短的时间内完成。后来我发现了python里面的paramiko模块,用这个实现ssh登录更加简单。看下面的代码:

复制代码 代码如下:

#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y'
out = stdout.readlines()
#屏幕输出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要执行的命令列表
username = "" #用户名
passwd = "" #密码
threads = [] #多线程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()

上面的程序还是有些技巧的:
1.
利用多线程,同时发出登录请求,同时去连接电脑,这样速度快很多,我试了一下,如果不用多线程,直接一个一个挨着执行的话,大约5~10秒钟才能对一台电
脑操作完,具体时间要根据命令的来决定,如果是软件安装或者卸载时间要更长一些。这样下来怎么也要一二十分钟,用多线程后就快多了,所有的命令执行完用了
不到2分钟!
2.最好用root用户登录,因为安装或者卸载软件的时候如果用普通用户又会提示输入密码,这样又多了一次交互,处理起来就比较麻
烦!安装软件时apt-get install xxx
最好加上“-y”参数,因为有时安装或删除软件时提示是否继续安装或卸载,这又是一次自动交互!加上那个参数后就没有人机交互了。
3. 循环时循环所有ip,因为计算机的ip是路由器自动分配的,保险起见,最好全部都执行,保证没有遗漏的主机
4.远端执行命令时如果有交互,可以这样用 stdin.write("Y")来完成交互,“Y”就是输入“Y”。
5.把所有的命令放到一个列表里面,遍历列表可以依次执行列表里面的命令
6.为了更好的进行控制,最好在电脑上提前把root用户打开,装好ssh服务器并让其开机自动执行。

热点内容
空密码访问 发布:2025-05-16 18:08:51 浏览:891
腾讯云服务器安全规则设置 发布:2025-05-16 17:51:33 浏览:650
k3服务器不可用怎么办 发布:2025-05-16 17:51:30 浏览:537
编辑html源码 发布:2025-05-16 17:45:45 浏览:65
边的存储方法 发布:2025-05-16 17:33:16 浏览:927
海量服务器怎么拆 发布:2025-05-16 17:31:07 浏览:211
运行与编译的区别 发布:2025-05-16 17:25:02 浏览:824
c语言for中continue 发布:2025-05-16 17:20:14 浏览:648
ftp储存 发布:2025-05-16 17:04:08 浏览:505
家悦3010怎么看电脑配置 发布:2025-05-16 17:02:38 浏览:886