一、Paramiko模块简介
Python Paramiko是Python编程语言中的SSHv2协议的实现,支持连接SSH客户端和服务器。基于SSH客户端的基础功能,可以在Python环境中执行命令、传输文件、执行远程代码和控制SSH会话等。因此,Python Paramiko模块被广泛应用于后台自动化、配置管理、网络管理、系统测试、安全审计等领域。
二、安装Paramiko模块
如果你使用的是Python2.x版本,则需要执行以下命令进行安装:
pip install paramiko
如果你使用的是Python3.x版本,则需要执行以下命令进行安装:
pip3 install paramiko
三、Paramiko模块基本使用
1、SSH连接对象构建
在使用Paramiko模块进行SSH连接之前,需要构建SSH连接对象。SSH连接对象是一个连接到SSH远程主机的网络连接。
import paramiko
ssh = paramiko.SSHClient()
# 设置自动添加主机名及其对应的密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
2、SSH连接对象连接
SSh连接对象与远程主机建立SSH连接。
ssh.connect(hostname='example.com', port=22, username='user', password='password')
3、SSH连接对象执行命令
SSH连接对象执行远程主机的命令和程序。返回值为一个元组,包含了命令执行的返回码和标准输出结果。
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode('utf-8'))
4、SSH连接对象传输文件
SSH连接对象传输文件可以将本地文件复制到远程主机,也可以将远程主机文件复制到本地文件系统。
sftp = ssh.open_sftp()
sftp.put(local_path, remote_path)
sftp.get(remote_path, local_path)
sftp.close()
5、SSH连接对象控制会话
SSH连接对象控制会话可以用于交互式的SSH会话,也可以将多个命令执行在同一个SSH会话中。
channel = ssh.invoke_shell()
channel.send('ls -l\n')
print(channel.recv(4096))
四、Paramiko模块高级使用
1、SSH连接对象批量执行命令
通过SSH连接对象批量执行命令可以快速执行一系列的命令和脚本。
commands = ['uptime', 'df -h']
for command in commands:
stdin, stdout, stderr = ssh.exec_command(command)
print(stdout.read().decode('utf-8'))
2、SSH连接对象代理设置
SSH连接对象代理设置可以通过代理服务器让SSH连接对象连接到其他远程主机。
proxy = paramiko.ProxyCommand('ssh user@proxyhost -p 22 nc %h %p')
ssh.connect(hostname='example.com', port=22, username='user', password='password', sock=proxy)
3、SSH连接对象多个SSH连接
SSH连接对象多个SSH连接可以通过连接多个远程主机进行并行执行命令和数据传输。
ssh1, ssh2 = paramiko.SSHClient(), paramiko.SSHClient()
ssh1.connect(hostname='example1.com', port=22, username='user', password='password')
ssh2.connect(hostname='example2.com', port=22, username='user', password='password')
stdin1, stdout1, stderr1 = ssh1.exec_command('ls -l')
print(stdout1.read().decode('utf-8'))
stdin2, stdout2, stderr2 = ssh2.exec_command('df -h')
print(stdout2.read().decode('utf-8'))
4、SSH连接对象SSH密钥认证
SSH连接对象SSH密钥认证可以替代密码进行SSH连接,更加安全和方便。
ssh_key = paramiko.RSAKey.from_private_key_file('/path/to/key')
ssh.connect(hostname='example.com', port=22, username='user', pkey=ssh_key)
5、SSH连接对象控制超时时间
SSH连接对象控制超时时间可以避免SSH连接出现超时等问题。
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='example.com', port=22, username='user', password='password', timeout=3.0)
五、总结
Python Paramiko模块是Python编程语言中的SSHv2协议的实现,支持连接SSH客户端和服务器。通过SSH连接对象批量执行命令、传输文件、执行远程代码和控制SSH会话等,可以实现后台自动化、配置管理、网络管理、系统测试、安全审计等众多领域的应用。同时,通过SSH密钥认证、代理设置、多个SSH连接和超时时间控制等高级使用,可以提高SSH连接对象的安全性和可靠性。