摘要
说明 | |
---|
应用场景 | 利用python脚本连接多个linux虚机执行不同的操作 |
运行环境 | windows |
1.1 invoke_shell()
方式
1.1.1 创建client
import paramiko
port = 22
hostName = "admin"
hostPasswd = "Admin"
hostIp = "192.168.0.1"
sshclient = paramiko.SSHClient()
sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect(hostIp, port, hostName, hostPasswd)
sshclient.connect(hostIp, port, hostName, hostPasswd, compress=True)
channel = sshclient.invoke_shell()
1.1.2 发送命令
channel.send("su")
channel.send("rootPwd")
channel.send("cd /bin")
channel.send("ls")
binRes = channel.recv(9999).decode('utf-8')
if "python" not in binRes:
print("not find python, exit!!")
exit(1)
else:
print("the linx have python,continue")
channel.send("cd /home/admin/softScript")
channel.send("python script.py")
sshclient.close()
另外一种执行命令的方式是:exec_command
方式 | 说明 |
---|
invoke_all() | 具备持久化能力。更类似于交互的方式执行命令 |
exec_command | 不具备持久化能力,每个命令执行都是新环境。 比如cd /etc ,下次再运行时并不是在该目录下 |
1.2 exec_command
方式
1.2.1 创建client
import paramiko
port = 22
hostName = "admin"
hostPasswd = "Admin"
hostIp = "192.168.0.1"
sshclient = paramiko.SSHClient()
sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect(hostIp, port, hostName, hostPasswd)
sshclient.connect(hostIp, port, hostName, hostPasswd, timeout = 10)
1.2.2 发送命令
stdin, stdout, stderr = sshclient.exec_command("python /home/admin/test.py")
stdin.readlines()
stdout.readlines()
stderr.readlines()