【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
posted @ 2022-11-10 19:25  彬在俊  阅读(1654)  评论(0编辑  收藏  举报