利用paramiko模块实现连接远程主机
import paramiko
# 建立连接
client = paramiko.SSHClient()
# 跳过第一次连接时的yes/no选择
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 设置连接参数
client.connect(
hostname='172.25.254.42',
username='root',
password='westos'
)
# 远程执行命令
stdin, stdout, stderr = client.exec_command('hostname')
# 格式化命令返回结果
print(stdout.read().decode('utf-8'))
# 关闭连接
client.close()
from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException
def connect(cmd, hostname, user, password):
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(
hostname=hostname,
username=user,
password=password
)
except NoValidConnectionsError as e:
return ‘主机%s连接失败’ %(hostname)
except AuthenticationException as e:
return ‘主机%s密码错误’ %(hostname)
except Exception as e:
return ‘主机%s发生未知错误’ %(hostname)
stdin, stdout, stderr = client.exec_command(cmd)
# 获取命令返回结果
a = stdout.read().decode('utf-8')
# 关闭连接
client.close()
return a
利用paramiko批量远程连接主机
from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException
def connect(cmd, hostname, user, password):
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(
hostname=hostname,
username=user,
password=password
)
except NoValidConnectionsError as e:
return '主机%s连接失败' %(hostname)
except AuthenticationException as e:
return '主机%s密码错误' %(hostname)
except Exception as e:
return '主机%s发生未知错误' %(hostname)
stdin, stdout, stderr = client.exec_command(cmd)
# 获取命令返回结果
a = stdout.read().decode('utf-8')
# 关闭连接
client.close()
return a
with open('host') as f:
for line in f:
hostname,user,password = line.strip().split(':')
res = connect('hostname',hostname,user,password)
print(hostname.center(20,'*'))
print(res)
print(''.center(25,'*'))
利用paramiko实现上传下载
from paramiko.ssh_exception import AuthenticationException,NoValidConnectionsError
import paramiko
def put(hostname,password,source,target):
try :
transport = paramiko.Transport((hostname,22))
transport.connect(username='root',password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
except AuthenticationException as e:
return '主机%s密码错误' %(hostname)
except Exception as e:
return "未知错误",e
else:
sftp.put(source,target)
finally:
transport.close()
put('172.25.254.41','westos','/home/kiosk/test','/home/kiosk/Desktop/test1111')