使用百度网盘同步整个D盘

基于工作上有多个办公地点和办公电脑,我考虑使用百度网盘将各个电脑中的D盘进行同步。

百度网盘有一个同步功能,可以设置同步路径,但是其路径最后的文件夹名称一定为BaiduSyncdisk且不能进行人为修改。于是为了实现对整个D盘的备份,我将D盘软链接到C盘且使其软链接名称为 BaiduSyncdisk 即可。具体操作方法为:按win + q,输入cmd,右击使用管理员运行命令提示符,然后输入如下命令:

mklink /D "C:\BaiduSyncdisk" "D:\"

然后再于百度网盘中设置同步路径为C:\盘即可。

对网站履行公安备案

我在2023年12月收到武汉网警的短信通知,要求对网站旅行公安备案。短信信息:“【武汉网警】依据《计算机国际互联网安全保护管理办法》之规定,您开办的网站需履行公安备案,请搜索访问全国互联网安全管理服务平台提交备案”。我的备案流程记录如下:

1. 进行网站的ICP备案。

我很早前就通过Aliyun进行了网站的备案。相关信息:(1)网站名称是“宠辱不惊一心问学”;(2)域名是“www.chenlianfu.com”;(3)备案号是“鄂ICP备15010551号”。

进行公安备案需要填写工信部备案号,即ICP备案号。

2. 准备域名证书

我是在Aliyun万网上购买的域名,其提供了域名证书的下载:先打开www.aliyun.com网站并登录,点击右上角的控制台,点击我的导航栏目下的域名,继续点击域名列表,点击目标域名后面的管理,最后点击左侧的域名证书下载,右侧则出现对用的图片,可以截图或点击图片底部的下载。

3. 下载并安装公安一网通办APP

在手机上下载并安装公安一网通办APP ,并注册用户。

4. 在全国互联网安全管理服务平台上旅行公安备案

打开全国互联网安全管理服务平台官网https://beian.mps.gov.cn/web/dashboard/home,首先申请新增主体,需要上传身份证正反面和手持共3张照片;然后,做新办网站申请,需要工信部备案号、域名证书、域名名称IP有效期信息,在网络接入服务商和域名注册服务商栏目进行查询搜索阿里云即可。

兄弟3150CDN激光彩色打印机问题和解决方案

1. 打印出的纸张皱褶,整条黑色线条

打印机使用约3年后,打印出的纸张全都皱褶,且有黑色长线条。后来发现,是由于加热组件中的定影上辊黑色塑料表皮破损导致的。当纸张通过滚动的加热辊时,在破损位置不能很好压紧纸张,导致纸张皱褶且有长线条。我于是更换了单个定影上辊,淘宝购买花费了38元。需要注意的是,维修难道稍微有点大。若是不小心搞坏了整个加热组件,也没关系,购买全套加热组件,也就280元,这个安装就非常简单。

2. 报错Dump stop,需要对所有四种颜色硒鼓进行更换

需要对硒鼓进行清零。打开上盖,然后同时按住GO和上建,屏幕上提示Drum unit,再按OK键选择四种不同颜色的硒鼓进行重置即可。

3. 提示墨粉用完

将粉盒右侧的齿轮重新进行归位。

内网搭建网站后通过Aliyun中转

在内网的服务器性能强大,能搭建一个功能齐全的网站。但是内网服务器一般没有公网IP,或被单位屏蔽了对外访问的端口,从而不能直接被外网访问。于是通过以最低价格购买性能最差的Aliyun服务器后,它具有公网IP,可以用于将内网服务器的网站中转,用于所有人访问。

1. 在Aliyun上购买服务器和域名

在Aliyun上购买最低性能的共享性服务器,即可用于中转内网的网站信息。进行数据流的中转时,服务器几乎没有消耗CPU计算的,其价格可以做到很低。

朋友在Aliyun的万网上购买了一个域名,yue-zheng.com,将该域名指向了购买的服务器IP地址,用于做网站。

2. Aliyun服务器上设置域名对应本机的8001端口信息

首先,购买Aliyun服务器时选择Rocky 9.2 Linux系统。登录系统后,安装http网页软件。

dnf install -y http*

修改网页设置的配置文件/etc/httpd//conf/httpd.conf,尾部增加以下内容,表示将Aliyun服务上8001端口的信息转发到80端口上,用于提供对外的 www.yue-zheng.com 域名上的网页信息。

<VirtualHost *:80>
    ProxyPreserveHost On
    ServerName www.yue-zheng.com
    ProxyPass / http://127.0.0.1:8001/
    ProxyPassReverse / htt://127.0.0.1:8001/
</VirtualHost>

开启防火墙服务,开启网页服务,设置两个服务开机自动启动,开放80端口。

systemctl start firewalld.service
systemctl start httpd.service

firewall-cmd --add-port=80/tcp --permanent
systemctl restart firewalld.service


systemctl enable firewalld.service
systemctl enable httpd.service

3. 内网服务器搭建网站并通过ssh反向隧道将其8001端口连接到Aliyun的8001端口

首先,在内网服务器进行网站配置,在/etc/httpd//conf/httpd.conf文件尾部增加内容如下,表示将 /home/zhengyue/wordpress文件夹下的网站信息通过内网服务器的8001端口输出。

Listen 8001
<VirtualHost *:8001>
    DocumentRoot /home/zhengyue/wordpress
    ServerName www.yue-zheng.com
</VirtualHost>

同样配置内网服务器的httpd、防火墙服务和80端口开放。

systemctl restart firewalld.service
systemctl restart httpd.service

firewall-cmd --add-port=80/tcp --permanent
systemctl restart firewalld.service

systemctl enable firewalld.service
systemctl enable httpd.service

然后,配置内网服务器无密码登录到Aliyun服务器,并设置ssh反向隧道。将内网服务器的8001端口信息转发给Aliyun服务器的8001端口。

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub zhengyue@yue-zheng.com

ssh -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no -o ConnectTimeout=10 -f -N -R 8001:localhost:8001 zhengyue@yue-zheng.com

最后,将Wordpress博客网站搭建到内网服务器的 /home/zhengyue/wordpress 目录中。

cd /home/zhengyue
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
tar zxf latest-zh_CN.tar.gz && rm latest-zh_CN.tar.gz

sudo dnf install php php-devel php-fpm php-json
systemctl restart php-fpm.service
systemctl enable php-fpm.service

usermod -aG zhengyue apache
chmod 750 /home/zhengyue
systemctl restart httpd.service
chmod 775 /home/zhengyue/wordpress

输入www.yue-zheng.com来访问网站,并进行wordpress配置。

github的双重验证

最近github需要双重身份验证才能登录并上传代码。操作流程如下:

首先,登录GitHub后,打开Settings,点击左侧Password and authentication,设置Two-factor authentication为enabled。会弹出一个界面,上面有个二维码。

然后,在google浏览器中安装插件“身份验证器”,使用该插件给二维码截图,再点击插件,即可返回一串数字,填入网页中,即可完成验证。

Rocky 9系统对XFS磁盘进行配额

1. 安装quota软件

若没有xfs_quota命令,则安装quota软件:

dnf install quota

2. 关闭SeLinux安全机制

临时关闭
setenforce 0

永久关闭
perl -p -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3. 挂载磁盘时添加配额参数

mount -o remount,usrquota,prjquota /dev/sdb1 /home

或修改 /etc/fstab 文件永久生效(需要重新挂载目标分区才能生效):

/dev/sdb1 /home xfs defaults,usrquota,prjquota 0 0
# 注意有3种quota方式,usrquota给用户限额,grpquota给用户组限额,prjquota给文件夹限额。注意后两者是互斥的,只能选一种,当修改磁盘配额方式后,重启服务器服务器才能生效,而重新挂载分区是不行的。

然后使用mount命令查看挂载分区是否支持磁盘配额:

mount | grep home
/dev/sdb1 on /home type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

4. 开机时设置配额参数

虽然添加了挂载参数,使用mount命令检测时,其挂载方式依然是noquota。在使用xfs_quota进行配额时会失败,提示:

xfs_quota: cannot set limits: Function not implemented

此时,需要进行开机的配置设置,修改启动配置文件/etc/default/grub内容如下:

GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rhgb quiet rootflags=uquota,pquota"
主要添加了rootflags=uquota,pquota参数。

然后,重新生成启动文件:

对于Legacy启动
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.orig && grub2-mkconfig -o /boot/grub2/grub.cfg

对于UEFI启动
cp /boot/efi/EFI/rocky/grub.cfg /boot/efi/EFI/rocky/grub.cfg.orig && grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg

然后重启后,再检测mount参数。

5. 使用xfs_quota命令对分区进行配额

对user01用户的/home分区进行配额。软限制为3G,硬限制为3.5G。

xfs_quota -x -c 'limit bsoft=3000m bhard=3500m user01' /home
xfs_quota -x -c report /home

-x 允许执行管理员指令
-c 输入执行的指令

6. 使用xfs_quota命令对目录进行配额

对user01、user02、user03等多个用户的家目录进行配额。软限制为3G,硬限制为3.5G。按如下步骤进行:

第一步,生成/etc/projects文件
echo "1000:/home/user01
1000:/home/user02
1002:/home/user03" > /etc/projects
以上/etc/projects文件中设置了两个project编号。project编号是一个数字,可以随便给一个。其中1000对应两个文件夹,1002对应一个文件夹。后续设置好后,这1000对应的两个文件夹一起共享一个配额,而1002对应的文件夹独享一个配额。

第二步,生成/etc/projid文件
echo "user01_3G:1000
user03_3G:1002" > /etc/projid
该/etc/projid文件设置一个好记的project名称(随便取名,推荐取得有意义些),对应这project编号。

第三步,让project名称生效
xfs_quota -x -c 'project -s user01_3G' /home
xfs_quota -x -c 'project -s user03_3G' /home
命令行project的参数-s表示读取/etc/projects文件内容,标记目标文件夹进行配额。每当对/etc/projects文件内容进行修改后,则需要重新运行相应的命令,使修改生效。

第四步,设置project名称对应的磁盘配额。
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user01_3G' /home
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user03_3G' /home
命令行limit的参数-p表示使用project方式进行配额。若配额限制为0,则表示不进行配额限制。

7. 查看配额信息

查看磁盘配额及使用量:

xfs_quota -x -c report /home

查看磁盘分区和目录是否有quota设置:

xfs_quota -x -c print

查看磁盘配额的使用量:

xfs_quota -x -c "df -h"

在Rocky 9.2 Linux系统部署SGE

目前,最新版本的SGE版本是8.1.9版本,其软件较旧,在Rocky 9.2 Linux系统上使用其高版本的GCC进行编译基本不会成功。于是采用特别提供repo源进行安装,即采用某些高人已经编译好的rpm软件进行安装。

1. 设置各节点的主机名

部署SGE前,需要设置好各个节点的主机名,需要修改3个文件。以设置node1主机为例:

echo 'NETWORKING=yes
HOSTNAME=node1' > /etc/sysconfig/network
echo 'node1' > /proc/sys/kernel/hostname
echo 'node1' > /etc/hostname

然后在各节点上设置主机名和其IP映射信息:

echo '10.0.0.1 node1
10.0.0.2 node2
10.0.0.3 node3
10.0.0.4 node4
10.0.0.5 node5
10.0.0.6 node6
10.0.0.7 node7
10.0.0.8 node8' > /etc/hosts

2. 在管理节点上安装SGE软件

首先,开放防火墙端口。

sudo firewall-cmd --add-port=992/udp --permanent
sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-port=6445/tcp --permanent
sudo systemctl restart firewalld.service

然后,安装SGE软件可能依赖的一些系统软件。

sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs

继续,正式安装SGE软件,采用loveshack编译的SGE

sudo wget https://copr.fedorainfracloud.org/coprs/loveshack/SGE/repo/epel-9/loveshack-SGE-epel-9.repo -P /etc/yum.repos.d
sudo dnf -y install gridengine gridengine-devel gridengine-execd gridengine-drmaa4ruby gridengine-qmon
# 需要强制安装gridengine-qmaster,正常安装保存血少libdb4,而Rocky9默认安装libdb5。
sudo dnf -y download gridengine-qmaster
sudo rpm -ivh --nodeps gridengine-qmaster-8.1.9-6.el9.x86_64.rpm
sudo chown -R chenlianfu:chenlianfu /opt/sge

最后,在管理节点上部署SGE的qmaster服务。

cd /opt/sge
./install_qmaster
# 安装到靠后时,启动了Grid Engine qmasster服务,然后可以提供部署SGE的节点主机名信息,按y和Enter键使用一个文件来提供主机信息,输入文件路径/etc/hosts提供加入到SGE集群系统的主机信息。有利于后续在各计算节点上部署execd服务。

3. 在计算节点上部署SGE软件

首先安装SGE依赖的系统软件,然后部署SGE的execd服务。

sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs

cd /opt/sge
./install_execd
# 全程按Enter键直到完毕即可。

4. 启动SGE软件

部署完毕后,若需要使用SGE软件,则执行如下命令载入SGE的环境变量信息:

source /opt/sge/default/common/settings.sh

或将该信息添加到~/.bashrc从而永久生效:

echo 'source /opt/sge/default/common/settings.sh' >> ~/.bashrc
source ~/.bashrc

启动SGE软件方法:

sudo /opt/sge/default/common/sgemaster restart   # 控制节点启动
sudo /opt/sge/default/common/sgeexecd restaart   # 计算节点启动

查看SGE软件运行日志文件:

Qmaster:      /opt/sge/default/spool/qmaster/messages
Exec daemon:  /opt/sge/default/spool/<hostname>/messages

我通过编写一个程序:keep_SGE,使用root用户或无密码sudo权限运行后能自动维持管理节点或计算节点的SGE服务。再继续通过例行任务流程,能使集群中服务器再SGE系统中的稳定性。

sudo mkdir /root/bin
sudo wget http://chenlianfu.com/public/bin/keep_SGE -P /root/bin/
sudo echo -e "1\t*\t*\t*\t*\t/root/bin/keep_SGE" > crontab.txt
sudo crontab crontab.txt
sduo rm crontab.txt

5. 使用SGE软件

部署完毕SGE后,会生成一个默认主机用户组@allhosts,它包含所有的执行节点;生成一个默认的all.q队列名,它包含所有节点所有计算资源。默认的队列包含的计算资源是最大的。 通过使用命令qconf -mq queuename来对队列进行配置。修改hostlist来配置该队列可以使用执行主机;修改slots来配置各台执行主机可使用的线程数。从而对队列的计算资源进行设置。

使用qconf命令对SGE进行配置:

qconf -ae hostname
    添加执行主机
qconf -de hostname
    删除执行主机
qconf -sel
    显示执行主机列表

qconf -ah hostname
    添加管理主机
qconf -dh hostname
    删除管理主机
qconf -sh
    显示管理主机列表

qconf -as hostname
    添加提交主机
qconf -ds hostname
    删除提交主机
qconf -ss
    显示提交主机列表

qconf -ahgrp groupname
    添加主机用户组
qconf -mhgrp groupname
    修改主机用户组
qconf -shgrp groupname
    显示主机用户组成员
qconf -shgrpl
    显示主机用户组列表

qconf -aq queuename
    添加集群队列
qconf -dq queuename
    删除集群队列
qconf -mq queuename
    修改集群队列配置
qconf -sq queuename
    显示集群队列配置
qconf -sql
    显示集群队列列表

qconf -ap PE_name
    添加并行化环境
qconf -mp PE_name
    修改并行化环境
qconf -dp PE_name
    删除并行化环境
qconf -sp PE_name
    显示并行化环境
qconf -spl
    显示并行化环境名称列表

qstat -f
    显示执行主机状态
qstat -u user
    查看用户的作业
qhost
    显示执行主机资源信息

使用qsub提交作业

qsub简单示例:
$ qsub -V -cwd -o stdout.txt -e stderr.txt run.sh

其中run.sh中包含需要运行的程序,其内容示例为如下三行:
#!/bin/bash
#$ -S /bin/bash
perl -e 'print "abc\n";print STDERR "123\n";'

qsub的常用参数:
-V
    将当前shell中的环境变量输出到本次提交的任务中。
-cwd
    在当前工作目录下运行程序。默认设置下,程序的运行目录是当前用户在其计算节点的家目录。
-o
    将标准输出添加到指定文件尾部。默认输出文件名是$job_name.o$job_id。
-e
    将标准错误输出添加到指定文件尾部。默认输出文件名是$job_name.e$job_id。
-q
    指定投递的队列,若不指定,则会尝试寻找最小负荷且有权限的队列开始任务。
-S
    指定运行run.sh中命令行的软件,默认是tcsh。推荐使用bash,设置该参数的值为 /bin/bash 即可,或者在run.sh文件首部添加一行#$ -S /bin/bash。若不设置为bash,则会在标准输出中给出警告信息:Warning: no access to tty (Bad file descriptor)。
-hold_jid
    后接多个使用逗号分隔的job_id,表示只有在这些job运行完毕后,才开始运行此任务。
-N
    设置任务名称。默认的job name为qsub的输入文件名。
-p
    设置任务优先级。其参数值范围为 -1023 ~ 1024 ,该值越高,越优先运行。但是该参数设置为正数需要较高的权限,系统普通用户不能设置为正数。
-j y|n
    设置是否将标准输出和标准错误输出流合并到 -o 参数结果中。
-pe
    设置并行化环境。

任务提交后的管理:

$ qstat -f
    查看当前用户在当前节点提交的所有任务,任务的状态有4中情况:qw,等待状态,刚提交任务的时候是该状态,一旦有计算资源了会马上运行;hqw,该任务依赖于其它正在运行的job,待前面的job执行完毕后再开始运行,qsub提交任务的时候使用-hold_jid参数则会是该状态;Eqw,投递任务出错;r,任务正在运行;s,被暂时挂起,往往是由于优先级更高的任务抢占了资源;dr,节点挂掉后,删除任务就会出现这个状态,只有节点重启后,任务才会消失。

$ qstat -j jobID
    按照任务id查看

$ qstat -u user
    按照用户查看

$ qdel -j jobID
    删除任务

在Windows系统下安装和使用Cygwin软件

1. Cygwin简介

Cygwin软件是Windows系统下的一个终端软件。它其实是一个小型的Linux虚拟机,它能运用大部分的Linux原生命令,也能访问Windows的文件系统。

2. 安装Cygwin软件

在Cygwin官网https://www.cygwin.com/中下载最新版本的软件安装包,然后在windows系统下进行安装。需要注意的是,安装的时候要选择或填写可用的镜像站点网址(例如,http://mirrors.163.com/cygwin/)才能进行联网下载和安装。需要注意的是,在安装过程中要选择并安装一些常用的软件,例如 procps, gcc, make, cmake, openssh, curl, wget, perl, python, rsync, vim, lynx和chere等。在安装流程的选择软件包界面,查看的下拉菜单中选择完整,利用搜索来检索软件名称并双击跳过来进行软件的选择和安装。

软件安装完毕后,双击windows系统桌面上的软件图标,则打开了一个Linux系统的终端,用于Linux系统命令的直接运行。此外,Cygwin软件在Windows目录C:\cygwin64\bin下生成了各个Linux命令的exe文件,可以在windows下CMD中运行。需要注意的是, C:\cygwin64目录是Cygwin Linux系统的根目录,而windows的各个磁盘分区位于Cygwin Linux系统的/cygdrive目录下。

后续可以使用apt-cyg命令在Cygwin Linux中安装系统软件,需要安装其包管理器软件apt-cyg:

# 从官网下载apt-cyg软件,其实是一个bash脚本程序
curl https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
chmod 755 apt-cyg
mv apt-cyg /usr/bin

# 设置apt-cyg的源
apt-cyg mirror http://mirrors.163.com/cygwin
# 下载并安装rsync和oenssh软件
apt-cyg install rsync openssh procps
# 若报错没有wget和lynx命令,则重新双击Cygwin安装软件再次安装,搜索并选中wget和lynx命令,额外安装这两个命令后,则可以让apt-cyg顺利运行。

若需要更新Cygwin软件,直接下载最新版软件,再次安装到相同目录即可覆盖和更新,不影响Cygwin系统中已经安装好的软件和用户配置。

此外,若打开的Cygwin终端中不能正确显示中文主机名,可以在终端界面右击打开Options选项,做成点击Text栏,右侧在Locale菜单中选择C,Character set菜单中选择GBK,应用保存后,重新打开Cygwin终端,即可正常显示中文字符。

3. 在Windows系统的文件夹或桌面右键点击后打开Cygwin

默认情况下,通过桌面快捷方式或开始菜单中打开Cygwin软件,进入的工作目录是用户的家目录。为了更方便进行数据操作,可以实现:在某个文件夹或桌面上右键点击,再于弹出的菜单中点击打开Cygwin软件,并自动进入到所在的工作文件夹中。

有两种方法能实现右击打开Cygwin并进入工作目录:

1. 在Cygwin Linux系统中安装chere软件后,以管理员权限打开Cygwin Linux终端,执行命令:chere -i -t mintty -s bash,成功后,右键菜单中有“Bash Prompt Here”选项,点击即可打开Cygwin Linux终端,且自动进入目标文件夹。改进效果:按win+r,输入regedit按回车键后打开注册表编辑器,打开路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cygwin64_bash”,将默认数据“&Bash Prompt Here”改为“在此处打开 Cygwin”,能修改右击后菜单的选项名称;然后在页面右侧空白处右击新建字符串值并改名为“Icon”,双击它并填入数据值“C:\cygwin64\Cygwin-Terminal.ico”,使之指向一个图片log文件,能修改右击有菜单选项的图片log;左键点击下级选项command,双击右侧的默认选项,修改其值为:C:\cygwin64\bin\mintty.exe -e /bin/bash --login -i -c "cd '%V';exec bash",则表示使用右击菜单中的Cygwin打开时执行的CMD命令,能让打开Cygwin的方式更好。
2. 直接手动修改Windows系统的注册表信息:按win+r,输入regedit按回车键后打开注册表编辑器,打开路径“计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\Cygwin\command”;新建项Cygwin及其字符串Icon,该项的默认数据值设置为“在此处打开 Cygwin”,字符串Icon的数据值设置为“C:\cygwin64\Cygwin-Terminal.ico”;在其下新建项command,其默认数据值设置为C:\cygwin64\bin\mintty.exe -e /bin/bash --login -i -c "cd '%V';exec bash"。

以上通过修改Windows系统注册表的方式实现了右击打开Cygwin软件,修改后立马生效,不需要重启系统。

4. 一键同时打开多个排列整齐的Cywin终端并同时自动连接服务器

打开Cygwin软件的命令是 C:\cygwin64\bin\mintty.exe,可以在Cygwin终端中执行命令”mintty –help”查看其使用方法。可以通过一些参数设置终端窗口在Windows桌面上的位置、终端的行数和列数、是否有窗口边界、是否有标题、进入终端后执行的命令等。

在我个人笔记本电脑的Windows桌面上生成文件aa.bat,写入以下三行内容:

C:\cygwin64\bin\mintty.exe --position 3,3 --size 113x35 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116
C:\cygwin64\bin\mintty.exe --position 3,1060 --size 113x34 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116
C:\cygwin64\bin\mintty.exe --position 1930,3 --size 112x69 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116

当双击桌面上aa.bat文件时,即可同时打开3个Cygwin终端,能整齐排列并占满桌面;每个终端打开后则执行ssh命令并无密码自动登录到我的远程服务器中。

通过热键进行一键启动的高级用法:我个人通过AutoHotkey软件设置热键,当按 alt+f 键时,即表示执行了aa.bat,即可同时打开多个排列整齐的Cywin终端并同时自动连接服务器。操作方法:首先通过AutoHotkey官网https://www.autohotkey.com/下载并安装AutoHotkey软件;然后在桌面上生成文件aa.ahk,其内容如下,用于设置热键;双击aa.ahk文件运行程序,使热键生效;将aa.ahk文件放置到C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup路径(其中xxx是用户名)下,让aa.ahk程序能开机启动,从而实现永久生效。

; 在Windows系统桌面上打开多个cygwin终端
; 设置快捷的热键:^表示control键;#表示windows键;!表示Alt键;Right表示方向键右。
!f::
Run C:\User\Desktop\aa.bat
Return

通过SSH远程连接Windows系统并进行管理

1. 在Windows系统中安装OpenSSH服务端

在Windows11系统下,按 Windows+i 打开设置,点击应用,点击可选功能,点击查看功能,勾选OpenSSH服务器,点击下一步,点击安装。

或者使用Windows Terminal安装OpenSSH:按Windows + x,点击Windows终端(管理员),输入以下命令分别安装OpenSSH客户端和服务端。

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

安装完毕OpenSSH服务端后,还需要启动SSH服务,设置开机启动,设置防火墙。在Windows终端(管理员)中执行以下命令:

# Start the sshd service
Start-Service sshd

# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'

# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

操作完毕后,即可使用SSH登录到Windows系统终端了。登录后的操作,和在目标机器上打开其Windows终端进行操作是等同的。

ssh username@servername

修改OpenSSH配置文件,使支持使用密钥远程登录Windows系统。修改C:\ProgramData\ssh\sshd_config文件的内容,修改如下几项:

PubkeyAuthentication yes
PermitRootLogin no
ClientAliveInterval 60
ClientAliveCountMax 10
UseDNS no
GatewayPorts yes

修改完配置文件后,在Windows终端中重启SSH服务:

Stop-Service sshd; Start-Service sshd
或
Restart-Service -Name sshd

2. 实现在Linux服务器上执行一个命令后,能播放我个人笔记本电脑上的一段音乐

我经常远程登录Linux服务器进行比较耗时的计算,却又想在程序结束后能及时提醒我。于是,我在输入一个耗时较长的命令后,额外加一个命令finishing_reminder_by_ringingSong.pl。该命令在远程Linux系统上运行后,能播放我当前笔记本电脑Windows系统中的一段响铃音乐。具体的操作流程如下:

2.1 在Windows系统设置无密码登录的密钥和授权文件

将在Linux系统上的密钥文件id_rsa拷贝到Windows系统用户的.ssh文件夹下,将授权文件authorized_keys拷贝到C:\ProgramData\ssh文件夹下并重命名为administrators_authorized_keys。在Windows终端(管理员)中对这两个文件再进行权限设置,修改拥有者权限:

icacls.exe "C:\Users\chenlianfu\.ssh\id_rsa" /inheritance:r /grant "chenlianfu:F"
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

2.2 在Windows系统设置反向隧道连接到我的一台公网服务器

在Windows系统上执行命令,构建到公网服务器的反向隧道:

ssh -f -N -R 52228:localhost:22 chenlianfu@chenlianfu.com

考虑设置开机时在联网状态下自动运行以上命令:右击我的电脑,显示更多选项,管理,任务计划程序,创建任务,在弹出的页面中进行设置。触发器:启动后1分钟;条件:只有在有网络连接可用时才启动;操作:以上ssh命令。

在远程Linux计算服务器上检测能否使用密钥登录到Windows笔记本电脑上:

ssh -p 52228 chenlianfu@chenlianfu.com

2.3 在Windows下使用命令播放音乐

设置Windows系统Path路径:按Windows+q搜索“高级系统设置”,点击“查看高级系统设置”,在弹出的窗口中点击“环境变量”,鼠标左键选中“Path”所在行,再点击编辑,浏览到文件夹C:\Program Files (x86)\Windows Media Player和C:\Program Files (x86)\Tencent\QQMusic\QQMusic1917.16.31.32,从而将该路径添加进去,再点击确定。此外,我将音频文件放置于D:\ringing_sound_01.mp3路径。关闭所有Windows终端,再重新打开,输入命令即可播放音乐:

wmplayer.exe D:\ringing_sound_01.mp3
QQMusic.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3

2.4 在Linux服务器中远程播放本地笔记本电脑上的音乐

在远程Linux服务器中执行命令,即可播放本地笔记本电脑上的音频。

ssh -p 52228 chenlianfu@chenlianfu.com "wmplayer.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3"

备份Windows系统

1. 创建系统印象

按Windows+q,在搜索框输入“控制面板”,打开Window7时代的控制面板页面,再点击“备份和还原(Windows 7)”,于打开的页面中点击“创建系统映像”,即可将系统中的所有设置和软件备份到指定的驱动器下,生成文件夹WindowsImageBackup。

2. 创建回复驱动器

按Windows+q,在搜索框输入“创建恢复驱动器”,打开的页面中会自动识别驱动器,此时插上U盘后会自动刷新找到U盘的驱动器盘符,按提示将U盘做成启动盘,用于系统恢复。