【python】Python ssh 远程执行shell命令
前言:
Python paramiko
是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh
远程登录。首先来看一个简单的例子
工具:
python 2.7
paramiko
案例:
import paramiko
#实例化ssh客户端
ssh = paramiko.SSHClient()
#创建默认的白名单
policy = paramiko.AutoAddPolicy()
#设置白名单
ssh.set_missing_host_key_policy(policy)
#链接服务器
ssh.connect(
hostname = "192.168.2.186", #服务器的ip
port = 22, #服务器的端口
username = "root", #服务器的用户名
password = "123" #用户名对应的密码
)
#远程执行命令
stdin,stdout,stderr = ssh.exec_command("ls")
#exec_command 返回的对象都是类文件对象
#stdin 标准输入 用于向远程服务器提交参数,通常用write方法提交
#stdout 标准输出 服务器执行命令成功,返回的结果 通常用read方法查看
#stderr 标准错误 服务器执行命令错误返回的错误值 通常也用read方法
#查看结果,注意在Python3 字符串分为了:字符串和字节两种格式,文件返回的是字节
# 按字节返回结果
result = stdout.read().decode()
print(result)
# 按行返回结果
for i in stdout.readlines():
print(i)
免密登录
import paramiko
## 远程执行shell命令获取redash supervisor的pid信息
def remote_supervisor():
redash_node = ['10.11.68.224', '10.11.68.225']
# 端口
port=22
# 用户名
username='root'
# 秘钥
pkey='/root/.ssh/id_rsa'
key=paramiko.RSAKey.from_private_key_file(pkey)
for i in redash_node:
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.load_system_host_keys()
s.connect(i, port, username, pkey=key)
stdin,stdout,stderr=s.exec_command("supervisorctl status |grep 'redash_rq:redash_rq' |awk '{print $1, $4}'")
print stdout.read()
报错
问题一:
paramiko远程连接服务器报错:paramiko.ssh_exception.SSHException: Server '10.114.2.3' not found in known_hosts
解决方法:
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) -----加上这一句
# 连接服务器
ssh.connect(hostname=hostname,port=22, username=username, password=password)
参考:
- ·
https://blog.csdn.net/weixin_38051795/article/details/78826758
https://blog.csdn.net/jkx521/article/details/98521562