python SSH专题一

在工作中我们会一遍又一遍地去通过执行shell命令来完成机械重复的事情,但最近发现能否通过python来减轻工作机械重复的耗时,提高工作效率,所以就尝试进行python SSH的代码实现。

本次使用的库是:paramiko(怎么像是日本的英文名?!)

一、通用SSH命令执行

通过SSHClient进行SSH客户端定义,并执行connect远程连接后进行exec_command执行相应shell命令,代码片段如下:

def sshdo(hostname,port,username,pwd,command):

ssh = paramiko.SSHClient()# 创建SSH对象

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在know_hosts文件中的主机

    ssh.connect(hostname=hostname,port=port,username=username,password=pwd)# 连接服务器

    log_file =open('./log_file.txt','w')

for cin command:

print(">>>" + c +":",file=log_file)

stdin, stdout, stderr = ssh.exec_command(c)

res, err = stdout.read(), stderr.read()

result = resif reselse err

res = result.decode()

res = result.decode("utf-8")

res = result.decode(encoding="utf-8")

print(res,file=log_file)

log_file.close()

ssh.close()# 关闭连接

二、跳板机到目标机器SSH命令执行

跳板机需要用到paramiko里面的channel(通道)方法,通过通道发送shell命令,代码片段如下:

def sshchannel_sendcmd(ip,username,password,port,cmds):

try:

s = paramiko.SSHClient()

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

s.connect(hostname=ip,port=port,username=username,password=password)

channel = s.invoke_shell()

channel.settimeout(10)

time.sleep(10)

for cin cmds:

channel.send(c+'\n')

time.sleep(2)

try:

res = channel.recv(65533).decode('utf-8').strip()

except Exception as e:

print(e)

break

        channel.close()

except Exception as e:

print(e)


其中ip 为跳板机IP,目标资源在cmds进行命令交互

你可能感兴趣的:(python SSH专题一)