Python实现ssh客户端连接远程服务器

码农公社  210.net.cn   210= 1024  10月24日一个重要的节日--码农(程序员)节

paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来实现的。 

Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令、文件传输等功能。 

默认Python没有自带,需要手动安装:pip install paramiko。如果安装失败,可以尝试yum安装:yum install python-paramiko。 

除了Paramiko模块,还有相同作用的fabric和pexpect模块。


SSH客户端实现方案一,远程执行命令(密码认证)


# -*- coding:utf-8 -*-
import paramiko  # 先安装pycrypto,再安装paramiko
 
# 创建SSH对象
ssh = paramiko.SSHClient()
 
# 允许连接不在~/.ssh/known_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接服务器
ssh.connect(hostname="www.210.net.cn", port=22, username="root", password="123456")
 
# 执行命令,不要执行top之类的在不停的刷新的命令(可以执行多条命令,以分号来分隔多条命令)
# stdin, stdout, stderr = ssh.exec_command("cd %s;mkdir %s" % ("/www/wwwroot", "aa"))
stdin, stdout, stderr = ssh.exec_command("python /www/wwwroot/test.py")
stdin.write("终端等待输入...\n")   # test.py文件有input()函数,如果不需要与终端交互,则不写这两行
stdin.flush()
 
# 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
res = result.decode()
res = result.decode("utf-8")
res = result.decode(encoding="utf-8")
print res
 
# 关闭服务器连接
ssh.close()

SSH客户端实现方案二,远程执行命令(密码认证)



import paramiko
 
transport = paramiko.Transport(("www.210.net.cn", 22))
transport.connect(username="root", password="123456")              # 建立连接
# transport.connect(username="root", password="口令", hostkey="密钥")
 
# 创建SSH对象,SSHClient是定义怎么传输命令、怎么交互文件
ssh = paramiko.SSHClient()
ssh._transport = transport
 
# 执行命令,不要执行top之类的在不停的刷新的命令
stdin, stdout, stderr = ssh.exec_command("df")
 
# 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
print result.decode()
 
# 关闭服务器连接
transport.close()



SSH客户端实现方案三,远程执行命令(密码认证)



import paramiko
 
client = paramiko.SSHClient()   # 创建SSH对象
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在known_hosts文件中的主机
 
# 连接服务器,以用户名和密码进行认证
client.connect(hostname="www.210.net.cn", port=22, username="root", password="123456")
 
#实例化Transport,并建立会话Session
ssh_session = client.get_transport().open_session()
if ssh_session.active:
    ssh_session.exec_command("df")
    print ssh_session.recv(1024)
 
# 关闭服务器连接
client.close()



SSH客户端实现方案四,远程执行命令(密钥认证)


import paramiko
 
ssh = paramiko.SSHClient()     # 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 允许连接不在know_hosts文件中的主机
 
#这里写我们的密钥文件
private_key = paramiko.RSAKey.from_private_key_file("key.poem")
# 连接服务器,这里我们用pkey参数设置为私钥登陆
ssh.connect(hostname="www.210.net.cn", port=22, username="root", pkey=private_key)
 
stdin, stdout, stderr = ssh.exec_command('df')   # 执行命令
res, err = stdout.read(), stderr.read()          # stdout.readline()
result = res if res else err
print result.decode()
 
ssh.close()   # 关闭连接




引自https://www.cnblogs.com/liuhaidon/p/11753478.html,轻度整理

评论