import paramiko
import threading
class ftpclient(object):
def __init__(self):
self.ssh = paramiko.SSHClient()
def sftp_connect(self, hostname, port, username, passwd):
transprot = paramiko.Transport((hostname, port))
transprot.connect(username=username, password=passwd)
self.sftp = paramiko.SFTPClient.from_transport(transprot)
def ssh_connect(self, hostname, port, username, passwd):
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(hostname=hostname, port=port, username=username, password=passwd)
def cmd_ssh(self, *args):
while True:
cmd = input(">>>")
if cmd == 'q':
exit()
stin, stdout, stderr = self.ssh.exec_command(cmd)
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())
def interactive(self):
while True:
cmd = input(">>>").strip()
if not cmd:
continue
if cmd == 'q':
exit()
cmd_str = cmd.split()[0]
if hasattr(self, "%s" % cmd_str): #判断用户输入的命令是否存在
func = getattr(self, "%s" % cmd_str) # 如果self对象中有属性cmd_str则打印cmd_str的值
func(cmd)
def get(self, *args):
filename = args[0].split()[1]
self.sftp.put(filename, filename)
host_list = ['192.168.15.94', '192.168.15.210']
host_action = ["Action", "Put"]
def login():
while True:
port = input("请输入端口>>>").strip()
if port.isdigit():
port = int(port)
else:
continue
username = input("请输入用户名>>>").strip()
if not username:
print("用户为空")
continue
elif username.isdigit():
print("无数字开头用户")
continue
passwd = input("请输入密码>>>").strip()
if not passwd:
print("密码为空")
continue
return [port, username, passwd] #转为一个列表
def main():
while True:
for index, host in enumerate(host_list):
print(index, host)
choice_host = input("请输入你要进去的主机列表>>>").strip()
if choice_host.isdigit() and int(choice_host) < len(host_list):
choice_host = int(choice_host)
print('\033[41;1m %s \033[0m' % (host_list[choice_host]))
print("\t")
else:
continue
for index2, host2 in enumerate(host_action):
print(index2, host2)
choice_host_action = input("请输入你做的操作>>>").strip()
if choice_host_action.isdigit() and int(choice_host_action) < len(host_action):
choice_host_action = int(choice_host_action)
print('\033[41;1m %s \033[0m' % (host_action[choice_host_action]))
print("\t")
hostname = host_list[int(choice_host)]
if choice_host_action == 0:
while True:
connect_list = login()
port = connect_list[0]
username = connect_list[1]
passwd = connect_list[2]
try:
ftp = ftpclient()
ftp.ssh_connect(hostname, port, username, passwd)
ftp.cmd_ssh()
except ImportError as e:
print("有错误")
elif choice_host_action == 1:
while True:
connect_list = login()
port = connect_list[0]
username = connect_list[1]
passwd = connect_list[2]
try:
sftp = ftpclient()
sftp.ssh_connect(hostname, port, username, passwd)
sftp.cmd_ssh()
except ImportError as e:
print("有错误")
else:
print("没有这个编号!!")
p = threading.Thread(target=main,args=())
p.start()