python遠程ssh
1. python遠程執行命令
#!/usr/bin/python
# -*- coding: utf-8 -*-
import paramiko
# from cryptography.hazmat.backends import default_backend
import time
def excuseRemoteCmd(ipaddr, port, username, pwd, cmd):
print(ipaddr, port, username, pwd, cmd)
try:
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(ipaddr, port=port, username=username,
password=pwd, timeout=10)
# 打開一個Channel並執行命令
# stdout 為正確輸出,stderr為錯誤輸出,同時是有1個變量有值
stdin, stdout, stderr = ssh.exec_command(cmd, get_pty=True, timeout=60)
# 打印執行結果
# for item in stdout.readlines():
# print item
while not stdout.channel.exit_status_ready():
result = stdout.readline()
print(result)
if stdout.channel.exit_status_ready():
result = stdout.readlines()
print(result)
break
# 錯誤打印
err_list = stderr.readlines()
if len(err_list) > 0:
print 'ERROR:' + err_list
# exit()
# 關閉連接
ssh.close()
return stdout, stderr
except Exception as e:
print(e)
return stdout, stderr
2. shell遠程執行命令
# 遠程執行腳本
CardCmd = "ssh -T -o ServerAliveInterval=5 -p %s %s@%s \"sh /opt/xxx/sed_network_card.sh %s\"" % (
remotePort, username, remoteIp, remoteIp)
print("getNetCardCmd:%s" % (CardCmd))
status, output = commands.getstatusoutput(CardCmd)
if status != 0:
print("cmd result:%s,status:%s" % (output, status))
return status, output
----------------------------------------------------------------------------
# 遠程拷貝
Cmd = "scp " + " -P " + remotePort + " " + SrcPath + \
" "+username+"@"+remoteIp+":" + DstPath
print("Cmd:", Cmd)
status, output = commands.getstatusoutput(Cmd)
if status != 0:
print("cmd result:%s,status:%s" % (output, status))
return status, output