站内公告:

我们的虚拟社区正式开通了

Main Menu

最新帖子

#1
Linux 系统 / Could not open a connection to...
上次发布者 jvip_chen - 2023-10月-31 11:39 上午
执行ssh-add时出现Could not open a connection to your authentication agent

在执行
ssh-add ~/.ssh/id_ras时发生此错,执行如下命令 
ssh-agent bash
然后再执行
ssh-add ~/.ssh/id_ras
即可。
#2
Linux 系统 / SSH自动登录config文件配置
上次发布者 jvip_chen - 2023-8月-28 06:53 上午
概述
之前说过可以使用 spawn 命令来自动登录服务器,但是仅仅是登录那么很方便,如果使用 scp 拷贝文件呢?是不是得使用最原始的 scp user@host:/xxx .,这样就不方便了。

配置服务端
将本机的 ~/.ssh/id_rsa.pub 文件配置到服务器的 ~/.ssh/authorized_keys 文件中。

使用 ssh-copy-id 进行上传,运行 ssh-copy-id xxx@0.0.0.0 会自动将公钥追加到 authorized_keys 文件中。

注意:.ssh 目录的权限和 authorized_keys 的权限分别是 700 和 600。

配置客户端
配置好服务端之后我们就可以使用 ssh user@host 直接登录服务器了,不需要输入密码,那么我们还得记住 user 和 host,还有更简单的方法吗?那当然啦。

配置 ~/.ssh/config 文件

直接显示我的配置内容

Host {name}
    HostName {host}
    User {user}
    IdentityFile ~/.ssh/id_rsa
Host {name}
    HostName {host}
    Port {port}
    User {user}
    IdentityFile ~/.ssh/id_rsa
注意空格和缩进

{name} 就是给服务器起一个别名,{port} 可以不写,默认22端口

配置完后,就可以使用 ssh {name} 直接登录服务器了,那么使用 scp 呢?直接使用 scp {name}:/xxx . 就可以了。
#3
代码管理-Git / gitlab备份与恢复
上次发布者 jvip_chen - 2023-8月-17 11:09 上午
前言
本文主要介绍gitlab安装完成之后,使用过程中的备份和恢复。安装教程可参考上方的Linux安装gitlab教程。备份两种方式:手动备份和定时备份

以下是本篇文章正文内容
一、更改配置文件
上文说到过gitlab的配置文件为/etc/gitlab下的gitalab.rb,把下列配置信息写入配置文件使其生效

vim /etc/gitlab/gitlab.rb
#修改如下:
gitlab_rails['manage_backup_path'] = true       
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"    //gitlab默认备份目录,如有需要可更改
gitlab_rails['backup_archive_permissions'] = 0644      //生成的备份文件权限
gitlab_rails['backup_keep_time'] = 604800              //默认备份保留天数为7天(这里是604800秒)
更改完成后重载配置文件

gitlab-ctl reconfigure
二、手动备份
可以手动执行如下命令进行手动备份,备份后文件如下:

gitlab-backup create
三、自动备份
编写备份脚本,结合crontab实施自动定时备份,比如每天2点备份一次

cd
cd bin/
vim gitlab_backup.sh

#!/bin/bash
/usr/bin/gitlab-rake gitlab:backup:create
然后加入到crontab中

0 2 * * * /bin/bash /root/bin/gitlab_backup.sh > /dev/null 2>&1

四、备份恢复
GItlab只能还原到与备份文件相同的gitlab版本。
假设在上面gitlab备份之前创建了test项目,然后不小心误删了test项目,现在就进行gitlab恢复操作:

1、停止相关数据连接服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
查看gitlab状态
gitlab-ctl status
2、通过之前的备份文件进行恢复(默认的是/var/opt/gitlab/backups)

Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复

gitlab-backup restore force=yes
# 如果/var/opt/gitlab/backups/下有多个备份文件,可以执行下面命令指定恢复的目标
gitlab-backup restore force=yes BACKUP=1673231242_2023_01_09_15.5.4
最后再次启动Gitlab

gitlab-ctl start
恢复命令完成后,可以check检查一下恢复情况

gitlab-rake gitlab:check SANITIZE=true
然后稍等一会(如果启动gitlab后,访问出现500,这是因为redis等程序还没完全启动,等一会儿访问就ok了),再次登录Gitlab,就会发现之前误删除的test项目已经恢复了!

另外:Gitlab迁移与恢复一样,但是要求两个GitLab版本号一致。
#4
Linux Shell - 脚本中自动确认需要输入确认的命令
1、yum 命令
通过指定 -y 参数即可
yum -y  install xxx
2、其它命令
echo y | 执行的命令
#5
Vue开发 / 终极解决:Error: error:0308010C:dig...
上次发布者 jvip_chen - 2023-7月-17 04:09 下午
1、报错
启动vue项目,报错如下:
You cannot view this attachment.

2、报错原因
出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.

在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出这个异常。

3、解决方案
3.1版本降级,解决报错
尝试卸载Node.js 17+版本并重新安装Node.js 16+版本,然后再重新启动

这个方法,测试有效,但我推荐的是第二个办法。

3.2设置参数,解决报错
在执行运行项目命令之前,先运行这个命令:

Linux & Mac OS:
export NODE_OPTIONS=--openssl-legacy-provider
windows命令提示符:
set NODE_OPTIONS=--openssl-legacy-provider
这样就可以解决了,亲测有效。

唯一不足,是每次启动项目都要运行,所以,我们可以把它配置一下。也就是第三种方法。

3.3 修改配置文件,解决报错(推荐)
根据你的系统类型,选择一个上面的命令,如,我是Mac系统,我就用:
export NODE_OPTIONS=--openssl-legacy-provider
然后,找到项目的package.json文件,把自己对应的命令,加上&&,写到启动项目的配置里面(构建写不写都可以),即可。

例1:脚手架
"scripts": {
  "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
  "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
},
例2:Vue-Element-Admin
"scripts": {
    "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
//略...
  },
#6
Linux 系统 / appimage 错误dlopen(): error loa...
上次发布者 jvip_chen - 2023-7月-05 11:25 上午
运行appimage的时候,出现如下错误

dlopen(): error loading libfuse.so.2

AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
if you run it with the --appimage-extract option.
See https://github.com/AppImage/AppImageKit/wiki/FUSE
for more information

只要运行sudo apt install libfuse2就行
#7
Nginx服务器 / Ubuntu用Apt-get安装Nginx服务器
上次发布者 jvip_chen - 2023-6月-18 11:05 下午
1、添加nginx-Apt源
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
2、安装nginx
sudo install apt-get install nginx
#8
Linux 系统 / Linux 系统安全启动
上次发布者 jvip_chen - 2023-5月-16 06:30 下午
什么是安全启动

"安全启动" 是 2012 年出现的 Windows 8 预装电脑里的 UEFI 功能。目前所有的 Ubuntu 64位(非32位)版本支持此功能。简而言之,安全启动工作原理是在固件中启用信任源机制,虽然其它实现方式是可能的,但在实践中通过 x509 证书来实现信任链。根证书( 根证书是由受信任的证书颁发机构 CA 颁发的证书)嵌入在固件中,使得它可以验证签名的引导加载程序,然后,签名的引导加载程序可以验证已签名内核或已签名的第二级引导加载程序等。为了使用安全启动,我们需要使用UEFI启动系统,而不是旧的 BIOS。
BIOS与UEFI有什么区别?

两者都可初始化计算机,任务是加载操作系统。BIOS 通过读取硬盘上的第一个扇区(主引导记录 MBR)并执行它来启动,相比之下,UEFI 通过从硬盘上的分区(称为 EFI 系统分区 ESP)加载EFI程序文件(使用 .efi 文件扩展名)来启动。


如何判断Linux系统是使用UEFI还是BIOS启动的?

最简单的方法是检查文件夹 /sys/firmware/efi 是否存在。
secureBoot:~$ ls /sys/firmware/efi/
config_table fw_platform_size runtime systab
efivars fw_vendor runtime-map vars
如果 Linux 计算机使用传统 BIOS 启动,则不会出现 /sys/firmware/efi 文件夹。
legacy:~$ ls /sys/firmware/efi
ls: cannot access /sys/firmware/efi: No such file or directory


如何判断Linux系统是否使用安全启动?

mokutil 命令用于管理机主密钥(MOK),这些密钥由 shim 层用于验证 grub2和内核映像,也可用于验证安全启动是否启用。
secureBoot:~$ mokutil --sb-state
SecureBoot enabled
或者也可以使用 mokutil 命令来查看当前所有已注册的密钥。
secureBoot:~$ mokutil --list-enrolled

未签名模块的特征是什么?

如果在启用了安全启动的计算机上编译并安装了无有效签名的 Kvaser 驱动程序模块,即使连上了 Kvaser 分析仪,在运行 listChannels 示例的时候也不会侦测到任何通道。
secureBoot:~$ ./listChannels
Canlib version 5.20
Found 0 channel(s).
可以使用 lsusb 命令验证 Kvaser 分析仪实际上是由 USB 子系统连接和识别的。
secureBoot:~$ lsusb | grep Kvaser
Bus 003 Device 008: ID 0bfd:0108 Kvaser AB
通过查找系统日志中的错误,并会发现类似错误 "所需密钥不可用"。
apr 19 16:05:38 mypc /usr/sbin/mhydra.sh[22789]: modprobe: ERROR: could not insert 'mhydra':
Required key not available
apr 19 16:05:38 mypc systemd-udevd[22776]: Process '/usr/sbin/mhydra.sh start' failed with exit code 1.
这需要签名模块使其在计算机上工作。在下篇文章中将介绍如何构建和签署 Kvaser 驱动程序模块,以便能够在启用了安全启动的 Linux 计算机上使用它们。
#9
在一个h5页面中通过websocket连接服务器,如果该h5页面是通过https来访问,需要注意wss连接是不能以ip加端口的方式来连接的。

比如页面https://domain.com/index.html中有如下js代码

var wsServer = 'wss://8.8.8.8:8888';
var websocket = new WebSocket(wsServer);
这样是连接不上websocket服务器的,因为wss不支持ip加端口的方式。

解决的办法是利用nginx的方向代理功能,将代码改成:

var wsServer ='wss://domain.com/wss';
var websocket = new WebSocket(wsServer);
同时nginx配置文件中,加入如下配置:

# server外面最上面加
upstream webSocket {
  server 8.8.8.8:8888;#需要代理到的socket服务器端口
}
# server里面加入
# 访问:wss://xxxx.com/wss
location /wss {
  proxy_pass https://webSocket/;#代理到上面的地址去
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}
这样就可以连接成功了。

注意将文中的域名、ip和端口替换成你自己的。
#10
PHP框架-Yii / Yii2 关闭和打开csrf 验证
上次发布者 jvip_chen - 2023-1月-09 10:46 上午
1.在Yii2配置中配置所有:所有的controller都将关闭csrf验证,如果设置成true,则将打开csrf验证。

'request' => [
    'enableCsrfValidation' => false,
],


2.在Yii2 controller中配置当前的controller添加变量,下面的设置将关闭csrf验证。

public $enableCsrfValidation = false;