python使用paramiko远程操作linux服务器的例子,网络上有非常多详细的资源,这里也是相同的方法,只不过根据需要,实现远程执行多条命令;
例1:SSH远程连接linux操作系统,并执行多条命令,每次连接执行一条命令,循环n次
如果要执行的一批指令之间,没有先后关联的关系,那么每次连接执行一条指令,循环执行完这些指令就可以
def sshAgent_exeNcmd(ip,username,password,cmds,port):
'''
:param ip: 目标主机的ip
:param username: 目标主机登录用户名
:param password: 用户名对应的密码
:param cmds: 指令列表,list类型
:param port: ssh连接端口
:return: 返回获取的指令执行结果
'''
paramiko.util.log_to_file("paramiko.log")
try:
for excmd in cmds:
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname=ip, port=port, username=username, password=password)
print u'执行命令:',excmd
stdin, stdout, stderr = s.exec_command(excmd,timeout=240)
stdin.write("Y") # Generally speaking, the first connection, need a simple interaction.
#注意:执行的指令如果是reboot等没有返回输出结果的指令,则不需要读取stdout,执行完直接关闭连接;
str = stdout.read(65533)
if str !=None:print str
if stderr.read(65533) != None:print stderr.read(65533)
s.close()
return str
except Exception as e:
print(e)
例2:SSH远程连接linux操作系统,连接后执行多条命令;
如果要执行的指令之间,有一定的关联关系,必须要在一次远程连接中完成,那么就用‘;’拼接这些指令,然后发送执行吧;
def sshAgent_execmd_multi(ip,username,password,cmds,port):
'''
:param ip: 目标主机的ip
:param username: 目标主机登录用户名
:param password: 用户名对应的密码
:param cmds: 指令列表,list类型
:param port: ssh连接端口
:return: 返回获取的指令执行结果
'''
paramiko.util.log_to_file("paramiko.log")
try:
#将列表cmds中的指令用';'连接成一个分号分隔的字符串
excmd = ';'.join(cmds)
#建立ssh连接
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname=ip, port=port, username=username, password=password)
print u'执行命令:',excmd
stdin, stdout, stderr = s.exec_command(excmd,timeout=240,get_pty=True)
stdin.write("Y") # Generally speaking, the first connection, need a simple interaction.
#注意:执行的指令如果是reboot等没有返回输出结果的指令,则不需要读取stdout,执行完直接关闭连接;
str = stdout.read(65533)
if str !=None:print str
if stderr.read(65533) != None:print stderr.read(65533)
s.close()
return str
except Exception as e:
print(e)