我们一般使用linux的时候,都是在Windows上安装一个ssh客户端连接上去。那么从一台linux如何连接到另一条linux呢?使用ssh命令即可,因为每台linux机器自己都有一个ssh客户端。现在我们使用Python的paramiko模块可以实现ssh客户端,通过Python脚本远程登录一台机器并执行相关操作。
为什么要使用Python来实现ssh客户端呢?主要作用是用来作批量管理。如果让你使用ssh命令登录1台linux机器还好,但是如果让1000台机器同时执行一个命令怎么办呢?当然你可以使用shell脚本写一个for循环来实现,我们使用Python也可以实现。
paramiko模块:基于SSH用于连接远程服务器并执行相关操作
首先安装paramiko模块
基本命令:pip install paramiko
C:\Users\Administrator>pip install paramiko #由于我PC上同时安装了Python2和Python3,所以会报错
Fatal errorin launcher: Unable to create process using '"'C:\Users\Administrator>python3 -m pip install paramiko #用这个命令安装就好啦
...
Successfully installed asn1crypto-0.24.0 bcrypt-3.1.6 cffi-1.12.2 cryptography-2.6.1 paramiko-2.4.2 pyasn1-0.4.5 pycparser-2.19 pynacl-1.3.0 six-1.12.0C:\Users\Administrator>python3 #验证是否安装成功
Python3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64bit (AMD64)] on win32
Type"help", "copyright", "credits" or "license" formore information.>>>import paramiko #不报错说明安装成功>>>PS:别看上面用命令安装paramiko这么简单,刚开始跟着网上博客离线安装各种报错,浪费了我整整1天的时间,哎,说多了都是泪啊。。。
Win7系统下安装paramiko实操
[root@hadoop ~]# cd /usr/local/python3/bin/[root@hadoop bin]# pip3 install paramiko #直接安装会报错,所以请按下面步骤安装
pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.1.安装组件
[root@hadoop~]# install openssl openssl-devel python-dev pycrypto -y
[root@hadoop~]# yum install zlib-devel zlib #必须安装,不安装会报错
[root@hadoop~]# cd /usr/local/python3/[root@hadoop python3]# ./configure #安装zlib-devel需要对python3.5进行重新编译安装
[root@hadoop python3]# make&make install2.安装setuptools:
[root@hadoop python3]# cd bin
[root@hadoop bin]# pip3 install setuptools #貌似安装python3.6时已经顺带安装过了
Requirement already satisfied: setuptoolsin /usr/local/python3/lib/python3.6/site-packages3.安装paramiko
[root@hadoop bin]# pip3 install paramiko #安装成功未报错
Successfully installed asn1crypto-0.24.0 bcrypt-3.1.6 cffi-1.12.2 cryptography-2.6.1 paramiko-2.4.2 pyasn1-0.4.5 pycparser-2.19 pynacl-1.3.0 six-1.12.0[root@hadoop bin]# python3 #验证是否安装成功
Python3.6.1 (default, Sep 21 2018, 15:34:57)
[GCC4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type"help", "copyright", "credits" or "license" formore information.>>>import paramiko #不报错说明安装成功>>>参考:https://www.cnblogs.com/chimeiwangliang/p/7193187.html
CentOS7系统下安装paramiko实操
SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接:
import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机,否则可能报错:paramiko.ssh_exception.SSHException: Server '192.168.43.140' not found in known_hosts
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=b'192.168.43.140', port=22, username=b'root', password=b'123123')
# 执行命令
# stdin:标准输入(就是你输入的命令);stdout:标准输出(就是命令执行结果);stderr:标准错误(命令执行过程中如果出错了就把错误打到这里),stdout和stderr仅会输出一个
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read().decode() # 这个有问题,不显示错误,可以修改一下,先判断stdout有没有值,如果输出没有,就显示错误
print(result)
# 关闭连接
ssh.close()
#Author:Zheng Na
import paramiko
t