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="106.15.88.182", 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 paramikotransport = paramiko.Transport(("106.15.88.182", 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 paramikoclient = paramiko.SSHClient()   # 创建SSH对象
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在known_hosts文件中的主机# 连接服务器,以用户名和密码进行认证
client.connect(hostname="106.15.88.182", 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 paramikossh = 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="106.15.88.182", 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()   # 关闭连接

封装之后的使用

import sys,logging
from paramiko.client import SSHClient, AutoAddPolicy
from paramiko import AuthenticationException
from paramiko.ssh_exception import NoValidConnectionsErrorclass SshClient():def __init__(self):self.ssh_client = SSHClient()def ssh_login(self, host_ip, username, password):try:# 设置允许连接known_hosts文件中的主机(默认连接不在known_hosts文件中的主机会拒绝连接抛出SSHException)self.ssh_client.set_missing_host_key_policy(AutoAddPolicy())self.ssh_client.connect(host_ip, port=22, username=username, password=password)except AuthenticationException:logging.warning('username or password error')return 1001except NoValidConnectionsError:logging.warning('connect time out')return 1002except:print("Unexpected error:", sys.exc_info()[0])return 1003return 1000def execute_some_command(self, command):stdin, stdout, stderr = self.ssh_client.exec_command(command)print stdout.read().decode()def ssh_logout(self):self.ssh_client.close()if __name__ == "__main__":command = "whoami"       # 自己使用ssh时,命令怎么敲的command参数就怎么写ssh = SshClient()if ssh.ssh_login(host_ip="106.15.88.188", username="root", password="abc0506") == 1000:ssh.execute_some_command(command)ssh.ssh_logout()

python的paramiko模块 - breezey - 博客园

Python运维自动化开发之Paramiko模块_cc297322716的专栏-CSDN博客_paramiko walk

https://www.jb51.net/article/125681.htm

python3+paramiko实现ssh客户端 - 诸子流 - 博客园

另一个封装好的远程连接的组件,代码如下:

#!/usr/bin/env python
# coding:utf-8
'''
@file: SSHClient.py
@attention: ssh客户端使用
@desc:
'''
import paramiko
from paramiko.py3compat import u
import timeclass SSHClient(object):'''@attention: 关闭 ssh 链接@param ssh: ssh链接'''def close(self, ssh):ssh.close()'''@attention: 创建 ssh 链接@param v_username: 用户名@param v_password: 密码@param v_ip: IP@param v_port: 端口号'''def sshConnection(self, v_username, v_password, v_ip, v_port=22):# 创建SSH对象ssh = paramiko.SSHClient()# 把要连接的机器添加到known_hosts文件中ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname=v_ip, port=v_port, username=v_username, password=v_password)return ssh# endregion'''@attention: 执行单条命令@param ssh: ssh链接@param v_cmd: 需要执行的命令'''def sshExecByOne(self, ssh, v_cmd):# 执行stdin, stdout, stderr = ssh.exec_command(v_cmd)result = stdout.read()if not result:result = stderr.read()return result.decode()'''@attention: 执行命令集@param s: ssh链接@param l_cmd: 需要执行的命令集@param exec_wait: 执行命令间隔时间@param exit_wait: 退出等待时间'''def sshExecByMany(self, s, l_cmd, exec_wait, exit_wait):ssh = s.invoke_shell()# 执行for v_cmd in l_cmd:ssh.send(v_cmd)ssh.send('\n')time.sleep(exec_wait)if v_cmd=='exit':time.sleep(exit_wait)result = u(ssh.recv(9999))return resultif __name__ == '__main__':getClient = SSHClient()ssh = getClient.sshConnection('sys_admin', 'XSW@1qaz', '10.82.28.219')l_cmd = ['sudo su - ','su - oracle','sqlplus / as sysdba',u'select * from dual;','exit','df -h','exit']result = getClient.sshExecByMany(ssh, l_cmd, 1, 1)print(result)getClient.close(ssh)# getClient = SSHClient()# ssh = getClient.sshConnection('sys_admin', 'XSW@1qaz', '10.82.28.219')# result = getClient.sshExecByOne(ssh,'pwd')# print(result)# getClient.close(ssh)

Python—实现ssh客户端(连接远程服务器)相关推荐

  1. 【笔记】SFTP、ssh密钥连接远程服务器,putty工具生成密钥,详细图文教程

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 很久之前写文章做过笔记, 好久没用居然忘了, 还好有搜索功能,很方便就找到了. 不多B ...

  2. SSH 无法连接远程服务器

    一.SSH服务禁止使用密码登录 No supported authentication methods available (server sent: publickey,gssapi 解决办法 1. ...

  3. 在命令行中使用ssh连接远程服务器

    2019独角兽企业重金招聘Python工程师标准>>> 1. 连接远程服务器 ssh 用户名@服务器ip地址 -p 端口号 例如: ssh syc@192.168.1.123 -p ...

  4. python ssh连接服务器_pycharm通过ssh连接远程服务器教程

    由于想要使用pycharm连接Window子系统Ubuntu进行开发,找了很多教程都不够详细,花了点儿时间,最后配置成功. 将pycharm连接Window子系统的配置过程总结如下,连接其它远程服务器 ...

  5. AutoDL算力租用++Pycharm中SSH、SFTP连接远程服务器

    失踪人口回归,本次主要解决一下电脑无GPU或者GPU算力不够,但是需要进行神经网络训练的情况. 目录 前言 一.GPU租用 二.AutoDL算力租用 1.创建实例 2.SSH远程连接 三.Pychar ...

  6. aws linux使用ssh登陆_【Linux】 使用ssh连接远程服务器

    [Linux] 使用ssh连接远程服务器 前言:SSH,英文全称是Secure Shell Protocol(安全的壳程序协议).SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非 ...

  7. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  8. 简单介绍使用 ssh 连接远程服务器运行图形界面程序

    使用 SSH 远程连接运行图形界面程序  windwiny.20080310  简单介绍使用 ssh 连接远程服务器运行图形界面程序.  一.服务器安装运行SSH服务.在Ubuntu下:  安装 代码 ...

  9. PyCharm配置SSH和SFTP连接远程服务器

    文章目录 简介 安装 初试 TODO:跳板机 遇到的坑 参考文献 简介 SSH,Secure Shell,安全外壳协议,用于远程登录会话 SFTP,Secret File Transfer Proto ...

最新文章

  1. android aliasactivity作用,android activity-alias 的作用
  2. 还在用 Random生成随机数?试试 ThreadLocalRandom,超好用!
  3. php封装pdo实例以及pdo长连接的优缺点
  4. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 46: ordinal
  5. Java Web Start实例
  6. X-Frame-Options 配置
  7. 设计模式:观察者模式 ——— 城管来了,摊主快跑
  8. html5 can,基于html5 can-vas实现漫天飞雪效果实例
  9. Android内核开发:系统启动速度优化
  10. form表单重置、清空方法记录
  11. 学习笔记:SSH端口转发的三种方式
  12. 打印101~200之间的素数
  13. 关于移动端的touch事件(touchstart, touchmove, touchend,touchcancel)
  14. 如何检验数据样本的正态性?
  15. 新冠病毒又变种了, Lambda病毒比Delta病毒更危险
  16. 哪些APP需要做ASO优化?
  17. 即使隐藏脸部也没用 最新步态识别技术将用来辨识嫌疑犯
  18. 2018maya怎么加点_Maya2018新增了哪些共功能? Maya2018新功能全面预览
  19. 西安国微EDA研发中心正式启动运营;2020上半年10大典型工业网络安全事件 | 美通企业日报...
  20. 几十个学生用免费优质网站

热门文章

  1. openGauss凝聚创新力量,云和恩墨MogDB加速社区发展
  2. 今晚直播丨Oracle数据库SQL执行计划的取得和解析
  3. Oracle行迁移和行链接
  4. 鸟瞰 MySQL,唬住面试官!
  5. 高薪必备|Redis 基础、高级特性与性能调优
  6. 极速收藏!巨详细的分布式架构知识体系
  7. AI实战分享 | 基于CANN的辅助驾驶应用案例
  8. 解析对偶理论与对偶单纯性法
  9. 深度学习分类任务常用评估指标
  10. 基于LiteOS Studio零成本学习LiteOS物联网操作系统