python-paramiko
安装paramiko
[root@localhost ~]# pip3 install paramiko -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
Collecting paramiko
Downloading http://pypi.doubanio.com/packages/06/1e/1e08baaaf6c3d3df1459fd85f0e7d2d6aa916f33958f151ee1ecc9800971/paramiko-2.7.1-py2.py3-none-any.whl (206kB)
100% |████████████████████████████████| 215kB 3.2MB/s
Collecting cryptography>=2.5 (from paramiko)
Downloading http://pypi.doubanio.com/packages/58/95/f1282ca55649b60afcf617e1e2ca384a2a3e7a5cf91f724cf83c8fbe76a1/cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl (2.7MB)
100% |████████████████████████████████| 2.7MB 20.9MB/s
Collecting bcrypt>=3.1.3 (from paramiko)
Downloading http://pypi.doubanio.com/packages/8b/1d/82826443777dd4a624e38a08957b975e75df859b381ae302cfd7a30783ed/bcrypt-3.1.7-cp34-abi3-manylinux1_x86_64.whl (56kB)
100% |████████████████████████████████| 61kB 13.6MB/s
Collecting pynacl>=1.0.1 (from paramiko)
Downloading http://pypi.doubanio.com/packages/9d/57/2f5e6226a674b2bcb6db531e8b383079b678df5b10cdaa610d6cf20d77ba/PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl (961kB)
100% |████████████████████████████████| 962kB 22.6MB/s
Collecting six>=1.4.1 (from cryptography>=2.5->paramiko)
Downloading http://pypi.doubanio.com/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl
Collecting cffi!=1.11.3,>=1.8 (from cryptography>=2.5->paramiko)
Downloading http://pypi.doubanio.com/packages/f1/c7/72abda280893609e1ddfff90f8064568bd8bcb2c1770a9d5bb5edb2d1fea/cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl (399kB)
100% |████████████████████████████████| 399kB 53.7MB/s
Collecting pycparser (from cffi!=1.11.3,>=1.8->cryptography>=2.5->paramiko)
Downloading http://pypi.doubanio.com/packages/ae/e7/d9c3a176ca4b02024debf82342dab36efadfc5776f9c8db077e8f6e71821/pycparser-2.20-py2.py3-none-any.whl (112kB)
100% |████████████████████████████████| 112kB 8.1MB/s
Installing collected packages: six, pycparser, cffi, cryptography, bcrypt, pynacl, paramiko
Successfully installed bcrypt-3.1.7 cffi-1.14.0 cryptography-2.9.2 paramiko-2.7.1 pycparser-2.20 pynacl-1.4.0 six-1.15.0
[root@localhost ~]#
检查
[root@localhost ~]# pip3 list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
bcrypt (3.1.7)
cffi (1.14.0)
cryptography (2.9.2)
paramiko (2.7.1)
pip (9.0.1)
pycparser (2.20)
PyNaCl (1.4.0)
setuptools (28.8.0)
six (1.15.0)
API介绍
paramiko提供了3个类,transport、channel、sshclient,sshclient可以看做是前两个类的高级封装
示例
transport
import paramiko
import time
ip, port, username, password ='192.168.1.7',22,'root','123456'
trans = paramiko.Transport((ip,port)) # ssh.connect集成了这2个命令
trans.connect(username=username,password=password)
chan = trans.open_session() #ssh.invoke_shell()集成了这3个命令
chan.get_pty()
chan.invoke_shell()
chan.send('cd /tmp\r')
chan.send('ll\r')
time.sleep(1)
out = chan.recv(1024)
print(out.decode())
chan.close()
trans.close()
sshclient.exec_command执行一条命令
import paramiko
ip, port, username, password,command='192.168.1.8',22,'root','123456','date'
ssh = paramiko.SSHClient() #创建一个ssh对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #选择yes,接受key
ssh.connect(hostname=ip, port=port, username=username, password=password,timeout=5) #连接服务器
stdin, stdout, stderr = ssh.exec_command(command,get_pty=True) #执行一条命令
print(stdout.read().decode('utf-8')) #获取执行命令的结果
ssh.close() #关闭连接
sshclient. invoke_shell发送多条命令
import paramiko
import time
ip, port, username, password,command='192.168.1.8',22,'root','123456','date'
ssh = paramiko.SSHClient() #创建一个ssh对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #选择yes,接受key
ssh.connect(hostname=ip, port=port, username=username, password=password,timeout=5) #连接服务器
chan = ssh.invoke_shell() #获取伪终端
chan.send('cd /tmp\r') #发送多个命令
chan.send('ll\r')
time.sleep(1) #需要间隔时间,不然收不到输出
out = chan.recv(1024) #接收命令结果
print(out.decode('utf-8'))
chan.close()
ssh.close() #关闭连接
ssh.open_sftp()建立sftp上传下载文件
import paramiko,os
ip, port, username, password,command='192.168.1.8',22,'root','123456','date'
ssh = paramiko.SSHClient() #创建一个ssh对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #选择yes,接受key
ssh.connect(hostname=ip, port=port, username=username, password=password,timeout=5) #连接服务器
sftp = ssh.open_sftp()
uploadlocalpath = os.path.join(os.getcwd(),'test.txt')
uploadremotepath= '/tmp/test-1.txt'
sftp.put(localpath=uploadlocalpath, remotepath=uploadremotepath)
downloadlocalpath = os.path.join(os.getcwd(),'server-1.txt')
downloadremotepath = '/tmp/server.txt'
sftp.get(remotepath=downloadremotepath, localpath=downloadlocalpath)
sftp.close()
stdin, stdout, stderr = ssh.exec_command('ls /tmp',get_pty=True) #执行一条命令
print(stdout.read().decode('utf-8')) #获取执行命令的结果
ssh.close() #关闭连接