Python—实现ssh客户端(连接远程服务器)
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 paramiko
transport = 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 paramiko client = 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 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="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 NoValidConnectionsError class 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 1001
except NoValidConnectionsError:
logging.warning('connect time out')
return 1002
except:
print("Unexpected error:", sys.exc_info()[0])
return 1003
return 1000 def 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()
https://www.cnblogs.com/breezey/p/6663546.html
https://blog.csdn.net/cc297322716/article/details/78608283
https://www.jb51.net/article/125681.htm
Python—实现ssh客户端(连接远程服务器)的更多相关文章
- paramiko模块(基于SSH用于连接远程服务器)
paramiko模块,基于SSH用于连接远程服务器并执行相关操作 class SSHConnection(object): def __init__(self, host_dict): self.ho ...
- Mac下ssh连接远程服务器时自动断开问题
在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...
- Mac使用SSH连接远程服务器
1. 终端通过 ssh 连接远程服务器 ssh -p 36622 root@localhost 2. 文件上传下载 上传 scp 下载 scp 3. 客户端 FinalShell(推荐) FileZi ...
- ssh免密连接远程服务器
ssh免密连接远程服务器 借助ssky-keygen和ssh-copy-id工具,通过4个简单的步骤实现无需输入密码登录远程Linux主机 1 生成密钥 通过内置的工具生成RSA算法加密的密钥 ssh ...
- [转]学习win10的bash使用ssh连接远程服务器
1. 前言 微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步 ...
- windows连接远程服务器报错'SSH' 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方案
网上在windows下连接远程服务器的步骤如下: 1.打开cmd命令行窗口 2.输入cd ~/.ssh,进入c盘下的.ssh文件 3.输入“ssh root@远程服务器的ip地址”连接远程服务器, b ...
- VsCode通过SSH连接远程服务器开发
前言 nil 正文 安装插件 安装VsCode官方插件 Remote - SSH Remote - SSH: Editing Configuration Files WSL(远程桌面连接需要Remot ...
- 使用WinScp连接远程服务器和传输文件
早在3月份,我就使用到了WinScp,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议. 它的主要功能就是在本地与远程计算机间安全的复制文件..WinSc ...
- Pycharm连接远程服务器并进行代码上传+远程调试
前提:需要有一个远程服务器,知道他的ip.port.user.password 一.连接远程服务器 进入配置页面 Pycharm菜单栏,如下图所示,依次点击 Tools -> Deploymen ...
随机推荐
- OpenCV:图像的开运算与闭运算
导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) ...
- 最常见的 Git 问题和操作清单汇总
最常见的 Git 问题和操作清单汇总 引言 本文整理自工作多年以来遇到的所有 Git 问题汇总,之前都是遗忘的时候去看一遍操作,这次重新整理了一下,发出来方便大家收藏以及需要的时候查找答案. 一.必备 ...
- 单词倒序(java)
如何将一串单词组成的字符串倒序呢?如:" we go to school" 变成"school to go we "java代码实现: public stati ...
- WePy框架的使用
基本示例 import wepy from 'wepy';//引入wepy框架说明 // 通过继承自wepy.page的类创建页面逻辑 export default class Index exten ...
- Windows下Python虚拟环境
python的虚拟环境在windows和linux下的配置是不一样的 主要解决开发应用程序的时候Python依赖包的版本问题 虚拟环境 virtualenv 安装 pip install virtua ...
- 【转载】C++:switch红色下划线,Error:控制传输跳过的实例化解决办法
转载链接:https://blog.csdn.net/figoleon/article/details/50072029
- NOI Linux vim配置文件
set nu " set mu set ruler color torte set tabstop=4 set shiftwidth=4 set autoindent set cindent ...
- Mybatis和Hibernate框架的区别
Mybatis和Hibernate框架的区别1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据 ...
- 隐马尔可夫模型(HMM)及Viterbi算法
HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...
- Linux 部署 rabbitMQ集群
1. 部署Erlang 1.1 RabbitMQ依赖于Erlang,版本对应请查看 https://www.rabbitmq.com/which-erlang.html 1.2 下载安装Erlang ...