简介
ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。
有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。
由于paramiko属于第三方库,所以需要使用如下命令先行安装
pip3 install paramiko
本篇文章用到python模块是 paramiko
首先我们需要进入到准备好的linux主机(本篇以kali为例)
检查我们的ssh服务是否已经启动:
systemctl status ssh
成功启动效果如下:
此时的Active是处于running(运行)状态,说明我们已经启动成功了
如果我们的Active是处于dead(停止)状态,说明我们还没有启动ssh服务,只需要以下命令:
systemctl start ssh
在启动好ssh服务以后,我们可以尝试利用xshell去进行链接验证:
- 如果xshell可以链接成功,说明我们的环境就准备好了
- 如果xshell不能链接成功,说明我们的环境依然存在问题:
- 可能问题1:网络不通导致的xshell链接不成功,可以尝试使用ping命令去进行检查网络通不通畅
- 可能问题2:密码错误导致的xshell链接不成功,可以在我们的linux中执行passwd命令直接去修改密码
- 可能问题3:ssh默认是禁止root进行登录的,此时我们需要去修改ssh的配置文件
问题3的解决方法:
修改ssh的配置文件
打开ssh配置文件:vim /etc/ssh/sshd_config
修改PermitRootLogin这一行:将前面的注释#去掉,再将后面的no改为yes即可
随后保存退出配置文件,之后再把ssh服务重新启动(不重新启动,配置文件不生效)
重启ssh服务:systemctl restart ssh
这样我们的环境就搭建好了,可以继续向下进行操作,下面的操作均为pycharm中的操作:
# coding=utf-8
import paramiko
# 定义要攻击的目标主机ip
ip_addr='192.168.31.250'
# 定义端口号
ip_port=22
# 定义用户名
ip_user='root'
# 定义密码
ip_passwd='123456'
# 创建一个链接对象
client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 链接SSH服务端
client.connect(ip_addr,ip_port,ip_user,ip_passwd)
#在远程服务端要执行的操作
while True:
user_cmd=input("请输入要执行的命令或者q退出:")
if user_cmd.lower()=="q":
break
stdin,stdout,stderr=client.exec_command(user_cmd)
result=stdout.read().decode()
print(result)
client.close()
set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:
AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认
WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
exec_command():在远程服务器执行Linux命令的方法。
这样我们就实现了我们想要的效果了。
参考资料:
Python模块学习-Paramiko