# 导入paramiko库用于SSH连接,以及sys库用于处理命令行参数
import paramiko
import sys
# 定义一个函数send_command,用于发送命令到SSH服务器并打印输出结果
def send_command(ssh_client, cmd):
# 使用exec_command方法执行命令,并获取输入、输出和错误流
stdin, stdout, stderr = ssh_client.exec_command(cmd)
# 打印命令的标准输出
print(stdout.read().decode('utf-8'))
# 如果有标准错误输出,也打印出来
if stderr.read().decode('utf-8'):
print(stderr.read().decode('utf-8'))
# 定义一个函数connect,用于建立SSH连接
def connect(host, port, user, password):
try:
# 创建SSHClient实例
ssh_client = paramiko.SSHClient()
# 设置策略,自动添加主机密钥到本地HostKeys对象,不需要手动确认
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 使用提供的主机、端口、用户名和密码连接到SSH服务器
ssh_client.connect(host, port, username=user, password=password)
return ssh_client
except paramiko.AuthenticationException:
# 如果认证失败,打印错误信息
print("Authentication failed, please verify your credentials")
return None
except paramiko.SSHException as sshException:
# 如果无法建立SSH连接,打印错误信息
print(f"Could not establish SSH connection: {sshException}")
return None
except Exception as e:
# 如果发生其他异常,打印错误信息
print(f"An error occurred: {e}")
return None
# 定义主函数main
def main():
# 检查命令行参数的数量是否正确
if len(sys.argv) != 5:
print("Usage: python SSH僵尸网络.py <host> <port> <user> <password>")
return
# 从命令行参数中获取主机、端口、用户名和密码
host = sys.argv[1]
port = int(sys.argv[2]) # 确保端口是整数
user = sys.argv[3]
password = sys.argv[4]
# 尝试建立SSH连接
ssh_client = connect(host, port, user, password)
# 如果连接成功
if ssh_client:
# 进入循环,持续接收命令
while True:
# 获取用户输入的命令
command = input("请输入要执行的命令(输入'exit'退出):")
# 如果输入的是exit,就跳出循环并关闭连接
if command.lower() == "exit":
ssh_client.close()
break
# 发送并执行命令
send_command(ssh_client, command)
# 检查是否为主模块运行,如果是,则执行main函数
if __name__ == '__main__':
main()
运行命令:python SSH_client.py IP 端口号 username password
或者按图运行