一、Centos安装Paramiko
1、安装组件 yum install openssl openssl-devel python-dev pycrypto -y yum install zlib-devel zlib (必须安装,不安装会报错) 安装zlib-devel需要对python3.5进行重新编译安装: cd /usr/local/src/Python-3.5.1 ./configure make & make install
2、安装setuptools-19.6: wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 tar -zxvf setuptools-19.6.tar.gz cd setuptools-19.6 python3 setup.py build python3 setup.py install
3、安装paramiko
下载:http://pan.baidu.com/s/1dFKYNq5 密码:y2ml tar zxvf paramiko-1.14.0.tar.gz cd paramiko-1.14.0 python3 setup.py build sudo python3 setup.py install
4、报这个错的话: ImportError: No module named 'cryptography' 安装cryptography: pip3 install cryptography
没有pip3的话在usr/local/Python3.5.1/bin/目录找
二、Paramiko的使用:
1、基于账号密码的登录:
import paramiko #创建SSH对象 ssh = paramiko.SSHClient() #允许不在know_host文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 ssh.connect(hostname='192.168.71.3',port=22,username='root',password='zedata') #获取命令结果 stdin,stdout,stderr = ssh.exec_command('df -h') print(stdout.read().decode()) #输出结果 print(stderr.read().decode()) #输出错误结果
ssh.close()
2、基于公钥的连接:
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.71.2', port=22, username='root', pkey=private_key) #注若遇到TypeError: connect() got an unexpected keyword argument 'key' 这个错误,将key改为pkey。 # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 print(stdout.read().decode()) # 关闭连接 ssh.close()
3、基于用户名密码上传下载
import paramiko transport = paramiko.Transport(('192.168.71.3',22)) transport.connect(username='root',password='123') sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
4、基于公钥密钥上传下载
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') transport = paramiko.Transport(('192.168.71.3', 22)) transport.connect(username='root', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
Paramiko升级(Centos):
注:有时候paramiko的版本低会出现这个报错:paramiko.SSHException: Incompatible ssh peer (no acceptable kex algorithm)
pip install --upgrade pip
pip install paramiko --upgrade