本文参考 http://www.361way.com/python-paramiko-ssh/3984.html
paramiko
遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。可以用来远程登录主机并执行命令,传输文件等。
远程连接方法
使用paramiko
模块有两种连接方式,一种是通过paramiko.SSHssh()
函数,另外一种是通过paramiko.Transport()
函数。
# 方法一:
import paramiko
ssh = paramiko.SSHssh()
# set_missing_host_key_policy 允许连接不在 known_hosts 文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("IP", 22, "用户名", "密码")
ssh.close()
# 方法二:
import paramiko
t = paramiko.Transport(("主机",端口)) # 端口需要时 int 整型的
t.connect(username="用户名", password="密码")
SSH连接并执行命令
# 使用密码方式
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("IP", 22, "用户名", "密码")
# 执行命令 df
stdin, stdout, stderr = ssh.exec_command('uptime')
# 读取,数据量比较少,可以用 stdout.read() 读取
for line in stdout.readlines():
print line
ssh.close()
# 使用私钥方式
import paramiko
key = paramiko.RSAKey.from_private_key_file('/Users/zheng/.ssh/id_rsa')
ssh = paramiko.SSHssh()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("IP", 22, "用户名", pkey=key)
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close()
SFTP连接并上传下载文件
# 使用密码方式
import paramiko
scp = paramiko.Transport(('IP', 端口))
scp.connect(username='sate', password='pass')
sftp = paramiko.SFTPClient.from_transport(scp)
# 上传, 从本地上传到远端服务器
sftp.put('/tmp/server', '/tmp/server')
# 下载,从远端服务器下载到本地
sftp.get('/tmp/server', '/tmp/server')
scp.close()
# 使用私钥方式
import paramiko
scp = paramiko.Transport(('IP', 端口))
key = paramiko.RSAKey.from_private_key_file('/Users/zheng/.ssh/id_rsa')
scp.connect(username='sate', pkey=key)
sftp = paramiko.SFTPClient.from_transport(scp)
# 上传, 从本地上传到远端服务器
sftp.put('/tmp/server', '/tmp/server')
# 下载,从远端服务器下载到本地
sftp.get('/tmp/server', '/tmp/server')
scp.close()