同一台Linux电脑关于多个SSH KEY管理

使用环境:关于同一台电脑LInux系统下使用多个SSH key 切换使用(或者多用户使用ssh提交代码)

要求,可以创建不同的 PUBLIC KEY ,根据下面步骤设置.

(1)比如有aaa,bbb,ccc 三个帐号需要生成不同的 PUBLIC KEY

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):/root/.ssh/id_rsa_aaa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa_aaa.
Your public key has been saved in /root/.ssh/id_rsa_aaa.pub.
The key fingerprint is:
9b:92:f6:1f:d2:72:bd:72:19:45:42:5f:e4:65:33:64 root@AY140122145815620396Z
The key’s randomart image is:
+–[ RSA 2048]—-+
| .. .E=|
| ..o++|
| o. .|
| . |
| S . |
| . + .. |
| + = + .o |
| . o +..o. |
| …o. |
+—————–+

进过上面的shell 我们在 /root/.ssh/ 目录下创建 id_rsa_aaa 私钥 和 id_rsa_aaa.pub 公钥

注意这里

Enter file in which to save the key (/root/.ssh/id_rsa):/root/.ssh/id_rsa_aaa #设置路径,如果不设置默认生成 id_rsa 和 id_rsa.pub

(2)按照上面的步骤逐个生成 bbb 和 ccc 对应的公钥和私钥 ……..

(3)查看系统ssh-key代理,执行如下命令

$ ssh-add -l
Could not open a connection to your authentication agent.
如果发现上面的提示,说明系统代理里没有任何key,执行如下操作
exec ssh-agent bash

如果系统已经有ssh-key 代理 ,执行下面的命令可以删除

$ ssh-add -D

(4)把 .ssh 目录下的3个私钥添加的 ssh-agent

$ ssh-add ~/.ssh/id_rsa_aaa
$ ssh-add ~/.ssh/id_rsa_bbb
$ ssh-add ~/.ssh/id_rsa_ccc

依次执行上面三条shell 把三个私钥添加到 ssh-key 代理里面

(5)打开github 或者 开源中国 ssh 管理页面把 对应的公钥提交保存到代码管理服务器 (.pub 结尾)

(6)在 .ssh 目录创建 config 配置文件

nano ~/.ssh/config

输入如下配置信息

#aaa (github 配置)
Host aaa
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_aaa

#bbb (开源中国 配置)
Host bbb
HostName git.oschina.net
User git
IdentityFile ~/.ssh/id_rsa_bbb

#ccc
……..

(6)记住上面一步 Host 里设置的别名,开始克隆项目,以开源中国为例

git clone git@git.oschina.net:userName/projectName.git

附:进阶配置,已经测试通过:

Host 192.168.0.19,192.168.0.25
HostName 192.168.0.19,192.168.0.25
IdentityFile ~/.ssh/id_rsa.pub
User billtan
Host
HostName www.test.com
IdentityFile ~/.ssh/www.test.com.pub
PreferredAuthentications publickey
User admin

Centos查看端口占用情况和开启端口命令

Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:
lsof -i tcp:80
列出所有端口
netstat -ntlp
1、开启端口(以80端口为例)
方法一:
/sbin/iptables -I INPUT -p tcp –dport 80 -j ACCEPT 写入修改
/etc/init.d/iptables save 保存修改
service iptables restart 重启防火墙,修改生效
方法二:
vi /etc/sysconfig/iptables 打开配置文件加入如下语句:
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT 重启防火墙,修改完成
2、关闭端口
方法一:
/sbin/iptables -I INPUT -p tcp –dport 80 -j DROP 写入修改
/etc/init.d/iptables save 保存修改
service iptables restart 重启防火墙,修改生效
方法二:
vi /etc/sysconfig/iptables 打开配置文件加入如下语句:
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j DROP 重启防火墙,修改完成
3、查看端口状态
/etc/init.d/iptables status

有时启动应用时会发现端口已经被占用,或者是感觉有些端口自己没有使用却发现是打开的。这时我们希望知道是哪个应用/进程在使用该端口。

CentOS下可以用netstat或者lsof查看,Windows下也可以用netstat查看,不过参数会不同

Linux:

netstat -nap #会列出所有正在使用的端口及关联的进程/应用
lsof -i :portnumber #portnumber要用具体的端口号代替,可以直接列出该端口听使用进程/应用

一、检查端口被哪个进程占用
代码如下 复制代码
netstat -lnp|grep 88 #88请换为你的apache需要的端口,如:80

SSH执行以上命令,可以查看到88端口正在被哪个进程使用。如下图,进程号为 1777 。

apache-port-1.jpg

二、查看进程的详细信息

ps 1777

SSH执行以上命令。查看相应进程号的程序详细路径。如下图。

apache-port-2.jpg

三、杀掉进程,重新启动apache
代码如下 复制代码
kill -9 1777 #杀掉编号为1777的进程(请根据实际情况输入)
service httpd start #启动apache

SSH执行以上命令,如果没有问题,apache将可以正常启动。

Windows系统:

netstat -nao #会列出端口关联的的进程号,可以通过任务管理器查看是哪个任务

最后一列为程序PID,再通过tasklist命令:tasklist | findstr 2724

再通过任务管理结束掉这个程序就可以了

gitignore文件中添加新过滤文件,但是此文件已经提交到远程库,如何解决?

gitignore文件中添加新过滤文件,但是此文件已经提交到远程库,如何解决?

第一步,为避免冲突需要先同步下远程仓库
git pull

第二步,在本地项目目录下删除缓存
git rm -r –cached .

第三步,再次add所有文件
输入以下命令,再次将项目中所有文件添加到本地仓库缓存中
git add .

第四步,添加commit,提交到远程库
git commit -m “filter new files”
git push

linux 清空history以及记录原理

1、当前session执行的命令,放置缓存中,执行exit时,把缓存信息写入~/.bash_history

2、当session直接被kill时,缓存中的历史命令不会写入~/.bash_history

3、正确清空当前用户的history的方法
1
2
3
4

>~/.bash_history
history -c #清空当前缓存中的命令
exit #关闭shell连接,可以避免写入~/.bash_history
#执行exit,会把该命令记录到~/.bash_history文件去

ThinkPHP5.0多数据库切换

在项目开发中需要Thinkphp5读取多个数据库的数据,我的已经成功了在这里介绍一下,只需要简单的几步
这里写图片描述
database.php是框架默认的数据库配置,里面写数据库1的信息,新建了个database2.php是放置数据库2的信息。
创建完数据库2之后,在config配置文件里,文件最后引入数据库2的配置信息

$db_con2 = require_once(‘database2.php’);
然后在return 数组加添加
‘db_con2’ => $db_con2,

代码中引用:
选择数据库1的时候,我是用模型查询的直接写SQL语句:

//模型查询
$user = new User();
$result = $user->where(‘username’, $data[‘username’])
->where(‘password’, $data[‘password’])
->find();
或者
User::where(‘id’,’1′)->find();

//普通结构查询
Db::table(‘think_user’)->where(‘id’,1)->find();

查询数据库2的信息时,调用普通查询语句:

$list = Db::connect(‘db_con2’)
->table(‘nrf_amf_reg_info’)
->alias(‘r’)
->join(‘nrf_amf_server s’,’r.Id = s.nrf_amf_reg_Id’,’LEFT’)
->paginate();
或者
$list = Db::connect(‘db_con2’)->name(‘nrf_disc_record’)->paginate();
注:nrf_amf_reg_info和nrf_disc_record为表名

这样,及时在一个项目中,也能分别调用不同数据库中的数据了!!!

Bt(宝塔面板)忘记用户名密码的解决方案

Bt(宝塔面板)用的人还是很多的,但是有的时候不注意忘掉了用户名和密码我们这时候要分2种情况,如果是面板刚安装好,不小心关掉了ssh工具,然后我们忘掉了初始的用户名和密码,或者就是我们在后台已经更改过了用户名和密码,但是我忘记了。那这些情况我们应该怎么解决呢,大鸟下面来说说!
第一:新装面板用户

我刚安装好面板,但是我没有把系统初始的用户名和密码记下来,我么可以这样解决,进入ssh然后输入命令如下:

bt default

Bt(宝塔面板)忘记用户名密码的解决方案
我们刚到初始的用户名和密码了,这样你登陆面板输入就可以了。
第二:重置密码

这是我们已经修改过用户名和密码了,如何解决了。进入ssh 输入以下命令重置密码(把命令最后面的 “testpasswd” 替换成你要改的新密码)如果你直接复制这条命令那默认的密码就是 “testpasswd”!(PS:若是debian/ubuntu用户,请使用有root权限的账户去执行这条命令。)

cd /www/server/panel && python tools.pyc panel testpasswd

Bt(宝塔面板)忘记用户名密码的解决方案
我们看到输入命令之后大鸟标注了两个红框的位置,第一个红框是密码就是我们的testpasswd,第二个红框是我们的用户名daniao用这个用户名密码就可以登陆了。
第三:登录失败

如果提示多次登录失败,暂时禁止登录 请输入以下命令 清除登录限制:

rm –f /www/server/panel/data/*.login

这样我们就解决了忘记用户名密码的问题,如果有人还要问,如果我忘记了端口号怎么解决呢,别急大鸟一会在出个教程!教程如下:

为什么要使用消息队列?

相关概念
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削峰等问题。实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。流量如果非常之巨大,消息队列必不可少的。
使用场景
异步处理
场景说明:当用户注册成功后,发送注册邮件,发完邮件然后发送注册短信。
传统串行方式:将注册信息写入数据库成功后,向用户发送邮件,再发送注册短信,将结果返回客户端。
对于客户端接收来说,经历了三个业务节点:入库、邮件、短信,对于用户就会消耗累积三个业务节点的时间。
优化方式
并行方式:将注册信息写入数据库成功后,发送注册邮件的同时也发送注册短信,以上三个任务完成后,返回给客户端。这样节省了一个业务节点环节。
消息队列:将注册信息写入数据库成功后,注册信息写入消息队列,发送邮件和短信的消费者异步读取消息队列,写入消息队列即将结果返回给客户端,告诉用户注册成功。(后台跑消费者,通过消费者消费消息队列,完成邮件和短信的发送)

应用解耦
场景说明:电商平台日益强大之后,我们可以将订单系统和库存系统分离,用户下单后,订单系统需要通知库存系统,比如库存有100个商品,用户下单成功之后通知库存系统做处理。
传统方式:订单系统调用库存系统的接口。这种方式并不是很可靠,比如我们在访问接口的时候,系统挂了,或者库存系统挂了,这样用户下单就会失败。
消息队列
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功,先不管库存的事。
库存系统:订阅下单的消息,采用拉/推得方式,获取下单信息,库存系统根据下单信息,进行库存操作,这样用户下单的时候不管库存的事。

流量削峰
场景说明:比如电商平台做秒杀活动,一般会因为流量过大,导致流量暴增,服务端压力会巨大。
传统方式:服务端突然接收到来自前端的大量订单请求。
消息队列:在应用前端加入消息队列。
1:当用户请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或者跳转到其他页面,不至于服务器挂掉影响其他用户请求。
2:秒杀业务根据消息队列中的请求信息,再做后续处理。
日志处理
解决大量日志传输的问题
日志采集客户端,负责日志数据采集,写入RabbitMq、kafka队列。
RabbitMq、kafka消息队列,负责日志数据的接收,存储和转发。
日志处理应用:订阅并消费RabbitMq、kafka队列中的日志数据,进行处理。

消息通讯
点对点消息队列,或者聊天室
点对点:客户端A和客户端B使用同一队列,进行消息通讯,就相当于A和B通话。

聊天室:客户端A,客户端B,客户端N订阅同一个主题,进行消息发布和接收,相当于QQ群、微信群。

https://www.cnblogs.com/wt645631686/p/8241602.html