1. 拷贝run.sh到server1的/home/user下
scp /user/run.sh username@server1:/home/user
2. 拷贝a文件夹到server1的/home/user下
scp -r /user/a username@server1:/home/user
此时需要输入密码,通过os.system加expect实现
def remoteShellSCP():
scp_put = '''
spawn scp -r %s %s@%s:%s
expect "*(yes/no*)?" {
send "yesr"
}
expect "Password:" {
send "%sr"
}
expect eof
exit
'''
os.system("echo '%s' > scp_put.cmd" % (scp_put % (script_path, username,
server, path2, password)))
os.system("expect scp_put.cmd")
os.system("rm scp_put.cmd")
其中:
1)expect里面的内容需要和实际完全一致,可以用*补全
2)os.system("echo '%s' > scp_put.cmd" % (scp_put %()))
将scp_put写入到scp_put.cmd
3)os.system("expect scp_put.cmd")
执行scp_put.cmd
通过paramiko连接远程服务器,执行命令def run_script():
"""
run script on server by:
1. connect server
2. run script
3. delete script
:param:
:return:
"""
for server in servers:
s = paramiko.SSHClient()
try:
logging.info("Server: {}".format(server))
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname=server,username=username,password=password)
logging.info("Run run.sh ")
stdin, stdout, stderr = s.exec_command("sudo bash /user/a/run.sh")
message = stdout.read().decode("utf8")
logging.info("Message: n{}".format(message))
stdin, stdout, stderr = s.exec_command("sudo rm -rf /user/a")
except Exception as e:
print(e)
finally:
s.close()
return
注:exec_command 里面每一个语句是独立的,每次会回到默认路径下执行,所以每次要加上sudo,和完整路径。



