目标:A电脑连接B电脑无需密码 第一步:生成私钥/公玥对 ssh-keygen -t rsa -P '' ssh连接是默认开启通过公钥和私钥这种连接方式连接的。 ‘’里面是私钥的密码,用于使用私钥时的二次验证,我们目的是不输入任何密码,所以这里留空。 默认生成的公钥地址为.~ssh/id_rsa.pub,默认生成的私钥地址为~ssh/id_rsa 私钥应存在A电脑中,然后我们把公钥复制到B电脑里去,如放到~/id_rsa.pub 第二步:修改权限, 添加私钥 这一步非常的重要,否则会一直失败。 保证两台电脑的.ssh的权限为700,A电脑中的私钥为600 A电脑使用命令 ssh-add ~/.ssh/id_rsa 把私钥添加到ssh中 第三步:配置B电脑的公钥 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 即在authorized_keys中追加这次的公钥 第四步:连接 A电脑直接ssh B电脑,如果前面的配置正确,就能做到无密码登录。 如果之前第一步的-P中填了二次验证的密码,只需要输入二次验证的密码,就能登录。
发表于 2017-11-02 14:09:56 | 条评论 | 阅读次数:148
上次被网易面试官怼的好惨,,决定认真学一下linux网络编程 详解 有用的结构体 有用的socket函数 有用的辅助函数 代码 socket tcp ipv4服务端代码 socket tcp ipv4客户端代码 详解 有用的结构体 TODO 有用的socket函数 TODO 有用的辅助函数 TODO 代码 socket tcp ipv4服务端代码 因为使用了pthread,所以编译时参数需要加-pthread cmake文件 cmake_minimum_required(VERSION 3.7)project(SocketServer)set(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES main.cpp)set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")add_executable(SocketServer ${SOURCE_FILES}) #include <string>#include <string.h>#include
C++
发表于 2017-09-09 23:52:44 | 条评论 | 阅读次数:338
redis也提供事务,但是和传统的数据库有着一些区别。 事务 用MULTI开启事务,EXEC关闭事务。 redis的事务主要是保证命令要么执行,要么都不执行(原子性)。 其实就是把命令刚开始只是发送到远程,但是并没有运行,直到收到EXEC,把刚刚的所有命令都一次性运行。 在MULTI和EXEC中,如果过程中的代码出现了错误,将有2种可能的情况。 1.如果编译上的错误,那么所有命令都不会被执行。 2.如果是运行上的错误,那么除了错误的那条命令,其他所有命令都会被执行。 redis并没有提供回滚的函数。 通常可以考虑打日志,然后用业务来做到回滚。 所以我们可以发现,redis并不能太好的保证一致性,所以用redis来做强一致性的事情,本来就是非常不符合设计的! 乐观锁(WATCH) WATCH可以用来监视一个key。 监视之后,在之后出现的第一个事务中,如果这个key的值在这个事务外被修改了,那么执行EXEC时将失败。所以通常都会设置retry(注意这里redis没有自动回滚这套操作,所以可能要注意一点)。 其实WATCH就是一个乐观锁。在WATCH一个key时,会记录下这个key的版本号。 之后
发表于 2017-08-28 20:12:43 | 条评论 | 阅读次数:204
常常会有这样的验证问题: 一个post表单,虽然有的位置规定了是int,但是用户总是尝试自己发送post数据,来模拟实际情况。所以是不能相信用户的输入的,故我们需要在views层收到数据时,对数据进行检验和转换。 这里推荐marshmallow,非常的方便强大。 dict格式化成dict from marshmallow import Schema, fields, post_loadfrom marshmallow.validate import OneOf# required表示这个参数必须要有,然后会先转换对应的类型,再通过validate函数验证class UserLoginSchema(Schema): username = fields.String(required=True) # 如果不指定required, 默认为False password = fields.String(required=True, validate=lambda x: len(x) > 0) phone = fields.Method('get_prefix_phone_code')
发表于 2017-08-28 17:43:10 | 条评论 | 阅读次数:238
主要是一些基础函数的处理,如如何处理和区分未登录的用户,如何记录已经登录的信息(即session),如何实现长久保存账号登录,如何处理异常等一些flask框架的基础问题。 一个维护性可用性高的网站,需要建立在一个好的运行平台的基础之上~ 目录 .gitignore app初始化 返回处理和错误处理 manager管理 登录模块的处理 视图层 目录 /app/consts/ #用来存放常量/app/database/ #用来放数据库的表/app/celery/ #用来存放一些schedule的代码/app/models/ #model层/app/libs/ #封装比较关键的库/app/utils/ #一些类似工具的代码/app/views/ #view层/app/templates/ #偶尔也会存在一些模板/app/tests/ #单元测试/app/__init__.py #放app的初始化的内容/cmd/ #存放一些bash脚本,如网站启动的脚本等/scripts/ #日常维护的python脚本config.py #配置,通常在.gitignore中config_template.py
发表于 2017-08-25 14:52:12 | 条评论 | 阅读次数:239
docker可以很方便的一键部署应用,非常的实用,学习一下,顺便看能不能作为OnlineJudge的编译容器。 概念 镜像Image: 说白了就是类似.iso文件 容器Container: 说白了就是把.iso安装在虚拟机里,成为一个虚拟主机 说白了,docker就是把做好的镜像,直接运行,变成得到临时的容器,容器通常都是一次性的,用完后自动销毁所有的数据。 sudo yum -y install docker # 安装sudo service docker start # 运行# 之后所有的操作,都必须是用管理员的权限运行的docker images # 查看已经下载的镜像docker ps -a # 查看容器docker restart [name or id] # 对于已经exit的容器,重启继续运行docker exec -it [name or id] /bin/sh # 对于正在运行的容器,进入shelldocker search xxxx # 搜索镜像docker pull xxxx # 下载镜像docker commit 5d8413f3d030 new_name
发表于 2017-08-25 13:05:30 | 条评论 | 阅读次数:109
grafana其实是一款web端的图形界面,主要是用来查看报表的。 influxdb是存储的数据库。 StatsClient是python的一款influxdb的客户端,用来往influxdb数据库中发数据。 利用StatsClient来写statsd类(之后再把这个类的代码放上来QAQ) 今天这个主要是记录如何配置grafana的图表,感觉这块网上资料比较少。 这个是效果图。 其实往里面输入点东西,之后就会显示数据库中所有的条数了 这样设置来检测访问量,time可以设置多长时间聚合成一个点,一定要设置fill,不然图可能不能正常的显示。 这样可以设置这一段时间内,的平均耗时,如果把mean改成max, 就能检测这段时间内的极端耗时了 这path这边还能设置路由路径,能精确到某一具体的网页
发表于 2017-08-16 20:22:38 | 条评论 | 阅读次数:143
Copyright © 2017 - 2018 qwb's blog
blog.csustacm.com All Rights Reserved
Powered by qwb Contact me