ubuntu下利用expect实现screen多窗口开机运行

ubuntu下利用expect实现screen多窗口开机运行

1. expect的安装与使用

1.1. expect的安装与使用

是什么

expect 是用来进行自动化控制和测试的工具。主要是和交互式软件telnet ftp ssh 等进行自动化的交互。

如何安装

1.2. 检测是否安装

ls /usr/bin |grep expect

如果不存在,则进行安装

1.3.安装

apt-get install expect
ls /usr/bin |grep expect
autoexpect
expect
expect_autoexpect
expect_autopasswd
expect_cryptdir
expect_decryptdir
expect_dislocate
expect_ftp-rfc
expect_kibitz
expect_lpunlock
expect_mkpasswd
expect_multixterm
expect_passmass
expect_rftp
expect_rlogin-cwd
expect_timed-read
expect_timed-run
expect_tknewsbiff
expect_tkpasswd
expect_unbuffer
expect_weather
expect_xkibitz
expect_xpstat

wiki对于expect说明https://zh.wikipedia.org/wiki/Expect

2. 安装screen

apt-get install screen

screen用法这里不做过多的介绍,请大家google搜索

3. 利用expect实现screen多窗口运行

3.1. 建立start.sh开机运行

#!/usr/bin/env bash
screen_name1=$"baidu"
screen -dmS $screen_name1
cmd1=$"ping www.baidu.com";
screen -x -S $screen_name1 -p 0 -X stuff "$cmd1" #创建screen
screen -x -S $screen_name1 -p 0 -X stuff $'\n' #回车
# 嵌套expect
# send "\01" 模拟输入 ctrl-a 
# send "d" 模拟输入d  ctrl-a+d是挂起screen
/usr/bin/expect <<EOF
send "\01"
send "d"
expect eof
EOF

screen_name2=$"google"
screen -dmS $screen_name2
cmd2=$"ping www.baidu.com";
screen -x -S $screen_name2 -p 0 -X stuff "$cmd2"
screen -x -S $screen_name2 -p 0 -X stuff $'\n'
/usr/bin/expect <<EOF
send "\01"
send "d"
expect eof
EOF

测试脚本

sh start.sh

查看screen窗口

screen -ls
#输出文字,字样就成功启动
There is a screen on:
    168.baidu   (06/08/19 07:14:04) (Detached)
    158.google  (06/08/19 07:14:04) (Detached)
1 Socket in /run/screen/S-root.

3.2 创建stop.sh文件

#!/usr/bin/env bash
screen_name1=$"baidu"
screen -X -S $screen_name1 quit #退出screen

screen_name2=$"google"
screen -X -S $screen_name2 quit

3.3 crontab定时执行这两个脚本

crontab  -e

0 10 * * * /root/start.sh #每天早晨10点
30 23 * * * /root/stop.sh #每天晚上23.30

3.4 开机运行

设置开机启用,仅限ubuntu18版本

#首先检查rc-local是不是启动了,如果启动最后完全还要restart,这里的坑,sandy踩了半个小时
systemctl status rc-local.service

vim /lib/systemd/system/rc-local.service
#最下加入
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

vim /etc/rc.local
#加入下面代码
#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
bash /root/start.sh
exit 0
#给予权限
chmod +x /etc/rc.local
#开启服务
systemctl enable rc-local
#启动服务并检查状态
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

#重新启动服务器
reboot

#检测服务器是不是已经启动
sudo systemctl status rc-local.service
#输出文字,字样就成功启动
Active: active (running) since Fri 2019-06-07 03:25:59 UTC; 19s ago
screen -ls
#输出文字,字样就成功启动
There is a screen on:
    168.baidu   (06/08/19 07:14:04) (Detached)
    158.google  (06/08/19 07:14:04) (Detached)
1 Socket in /run/screen/S-root.

寥寥君折腾实践经验所得,不接受其他转发,本站已经取得独立授权!:-)

ZeroTier 组建虚拟局域网,本地应用 IPv6服务

ZeroTier这个工具很多人都在使用,还是很不错的,而且很多路由器有集成插件.这次折腾是需求是,本地网络没有IPV6,但是需要访问IPV6的网络,感谢ZX大佬提点.

需要用到的

1、 VPS
2、ipv6地址块(这个he.net可以获取,最简单的方法是将 VPS 接入 HE 的 IPv6 Tunnel Broker
https://tunnelbroker.net/ ,注册帐号后点击左侧“User Functions”中的“Create Regular Tunnel”,在“IPv4 Endpoint”中填入你 VPS 的 IP 地址,“Available Tunnel Servers”是自行选择一个隧道入口,就近选择即可,然后点最下方”Create Tunnel“,耐心等待创建成功后你会来到隧道详情页面,你会看到”Routed /48“右侧有个”Assign /48“,点一下,申请/48地址块,并记录下这个地址块,后面需要用到),或者也可以用自己有广播好的ipv6{ip地址标记①}.

安装 ZeroTier,直接在 VPS 上执行

curl -s https://install.zerotier.com/ | sudo bash

安装完成后会显示一个 10 位的网络ID,请记下来,等会要用{标记②}

在注册了 ZeroTier 帐号后,创建一个网络等会需要用到.

进入这个网络的详情界面后,首先看到“Settings“,记下左上角的 Network ID{标记③} ;找到右侧的“IPv6 Auto-Assign”,勾选“ZeroTier RFC4193”{如果是用自己地址不要勾选,用he的才要},取消勾选“ZeroTier 6PLANE”

接着往下找到“Members”,在最下方“Manually Add Member”处输入我们之前记下②,然后“+ Add New Member”,这时你会看到你的 VPS 出现在了网络成员列表中,并记下灰色的 fd35 开头的 IPv6 地址④

回到 VPS,执行此命令,用③替换

zerotier-cli set <NetworkID> allowGlobal=true

在操作VPS之前确定你VPS可以ipv6,还有要开启转发

系统配置
编辑/etc/sysctl.conf,加入

net.ipv4.conf.all.forwarding = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv6.conf.all.accept_ra = 2

然后执行更新系统配置

sysctl -p

回到网页上的“Settings“,在”Managed Routes“中添加两条路由
第一个空填①,第二个空不填
第一个空填::/0,第二个空填④
然后在”IPv6 Auto-Assign“处勾选”Auto-Assign from Range“,第一个空填①,然后别动,等待一会,会自动帮你填写好 v6 地址范围(如果没有自动就自己用https://www.vultr.com/tools/subnet-calculator-ipv6/ )

将设备接入虚拟局域网以获取 IPv6

以 Windows 为例:

前往 http://www.zerotier.com/download.shtml 下载客户端,安装

首次运行会让你登录 ZeroTier,登陆完后应该会自动帮你加入你在前面建立的那个虚拟局域网(Win10会提示发现新网络之类的),然后右击托盘图标,”Show Networks“,将”Allow Global IP“、”Allow Managed IP“、”Allow Default Route“这三个全部打勾

如果”Show Networks“中什么也没有,就右击托盘图标退出程序,再重开一次,这是 ZeroTier Windows 客户端的问题,重启才会更新网络信息

如果没有自动加入,就右击托盘图标,”Join Network“,输入框中填写③,并打勾所有勾,然后”Join“

接着我们需要设置 IPv6 DNS,打开 控制面板->所有控制面板项->网络和共享中心,点击”ZeroTier One [xxxxxxx]“的连接,属性,Internet 协议版本 6,设置 DNS 为谷歌 IPv6 DNS2001:4860:4860::8888和2001:4860:4860::8844,一路确定保存

尝试在命令提示符中ping -6 google.com,Ping 通就说明成功接入 IPv6 了

test

https://test-ipv6.com/

https://ipv6-test.com/

还有些实际情况可以根据自己的需要修改,参考教程:
https://moe.best/tutorial/zerotier-ipv6.html
https://lantian.pub/article/modify-computer/zerotier-one-own-ipv6-tunnel.lantian

自制DD WIN系统镜像/使用Windows自动应答来自定义DD镜像

之前用过很多网上大佬做的DD镜像文件非常不错,看到Fmq大佬分享的很详细,这样就依葫芦画瓢制作自己需要使用的DD系统,文章转载Fmq大佬的,实践操作得到的经验非常好用.

准备工具:
DIMS++
7zip
virtio虚拟化驱动

下载原版:
微软原版的镜像可以从MSDN我告诉你上面找到:
https://msdn.itellyou.cn/

镜像打包 以2008为例

用7zip打开下载好的镜像,找到文件install.wim,路径\sources\install.wim,单独解压出来,并新建目录2008R2。

运行DISM++x64.exe(如果你的电脑是32位系统,就运行DISM++32.EXE)。

程序左上角点文件–>挂载映像–>点第一个浏览,找到install.wim–>目标镜像选择你需要的系统版本–>点第二个浏览,找到2008R2目录–>不选中只读模式–>确定。

等待几分钟挂载好,点击打开会话,左边侧栏选择更新管理–>扫描–>安装,开始安装更新,需要等10分钟左右,视机器性能。

下载virtio虚拟化驱动,用7zip解压到任意目录,左边侧栏选择驱动管理–>添加驱动–>选择刚才解压的驱动目录–>点选每个文件目录下对应的操作系统版本–>确定添加驱动。

左侧边栏选择空间回收,所有选项全选,扫描–>清理。

利用DISM++的其他功能对镜像进行修改。

程序左上角点击文件选择另存为镜像>–>浏览–>输入文件名2008–>保存–>确定–>生成2008.wim文件。

等待生成镜像的同时,选择控制面板–>系统安全–>管理工具–>创建并格式化硬盘分区–>选择操作–>创建VHD–>输入文件名2008,选择保存目录2008,文件大小选择10G,选择VHD格式和固定大小.就2008来说,VHD文件10G就足够,2012建议12-15G。

对新建的VHD硬盘进行初始化,分区选择MBR,右键新建简单卷,并一路下一步确认,盘符任意,这样就新建了一个磁盘。

等2008.wim文件建立完成,点击DISM++程序左上角文件–>释放镜像–>点第一个浏览,找到2008.wim–>点第二个浏览,选择刚建立的VHD磁盘–>选中添加引导和格式化–>确定–>更多–>选择刚建立的磁盘盘符–>确认。

等待释放完成后,就可以关闭DISM++。

至此,你有了一个名为2008.wim的装好驱动打好补丁的安装镜像及一个10G大小的磁盘文件2008.vhd。

修改注册表
如果你的VPS提供的控制面板有VNC,可以用鼠标,能快捷输入Ctrl+Alt+Del,那么你可以直接跳过这一步.但如果控制面板缺少这些功能,那么就需要修改镜像的注册表,让你能在DD系统后,直接通过远程连接进入桌面。

例如刚建立的vhd磁盘下的有目录\Windows\System32\config

在该目录下有两个类型为文件的注册表文件SYSTEM和SOFTWARE,它们分别对应系统注册表
HKEY_LOCAL_MACHINE\SYSTEM
HKEY_LOCAL_MACHINE\SOFTWARE

首先将镜像中的注册表文件加载到本地的注册表编辑软件中,选择运行–>输入regedit–>打开注册表–>点选HKEY_LOCAL_MACHINE–>程序左上角选择加载配置单元–>选择路径\Windows\System32\config,选择注册表文件SOFTWARE,项目名称输入test。

关闭Ctrl+Alt+Del登陆

HKEY_LOCAL_MACHINE\test\Microsoft\Windows\CurrentVersion\Policies\System
Value=”DisableCAD“
Type=”REG_DWORD“
Data=”1”
HKEY_LOCAL_MACHINE\test\Microsoft\Windows NT\CurrentVersion\Winlogon
Value=”DisableCAD“
Type=”REG_DWORD“
Data=”1”

值为 1 是关闭
值为 0 是打开值为 0 是打开

修改好后,一定要点选HKEY_LOCAL_MACHINE\test–>程序左上角选择卸载配置单元–>选择是,即完成修改。

同样,可以加载注册表文件SYSTEM修改远程桌面

打开远程桌面服务

HKEY_LOCAL_MACHINE\test\ControlSet001\Control\Terminal Server
Value=”fDenyTSConnections“
Type=”REG_DWORD“
Data=”0”

设置远程桌面端口(16进制值表示d3d:3389)

HKEY_LOCAL_MACHINE\test\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp
Value=”PortNumber“
Type=”REG_DWORD“
Data=”d3d“
HKEY_LOCAL_MACHINE\test\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp
Value=”PortNumber“
Type=”REG_DWORD“
Data=”d3d”

不验证用户级别

HKEY_LOCAL_MACHINE\test\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp
Value=”UserAuthentication“
Type=”REG_DWORD“
Data=”0”

新建防火墙规则:打开3389端口

HKEY_LOCAL_MACHINE\test\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
Value=”{33893389-3389-3389-3389-338933893389}“
Type=”REG_SZ“
Data=”v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=3389|Name=3389|”

端口最好不要用3389,选择五位数的端口。
防火墙规则(Data=”v2.10)这是2008系统的值,2012系统是(Data=”v2.20)。
修改完注册表后,一定要卸载配置单元来完成修改。

利用Windows自动应答来自定义DD镜像

利用Windows的无人值守自动应答文件,可以给DD镜像自定义参数设置,保证系统在启动的第一时间内可用,无需再单独设置。

无人值守自动应答文件是通过Windows Microsoft aik生成的。该文件包含了整个Windows系统安装过程中所有需要设置的参数。我们在配置DD镜像的过程中仅需要用到其中一部分。

以下两个文件为通用应答文件,适用于Windows7至10,Windows Server2008至2019系统,分64位和32位版本。请右键另存为。
Unattend-x64.xml
Unattend-x86.xml

下载之后修改文件名为Unattend.xml,并用记事本打开文件,修改如下内容:

1.修改电脑名称
找到参数

<ComputerName>xinaide</ComputerName>

修改其中xinaide为你想要的电脑名称,注意不要用特殊符号。

2.自定义登陆密码
文件默认启用Administrator账户,密码为 xinai.de 。参数位置在

<Value>xinai.de</Value>

一共有三处位置需要修改。注意!三处的密码必须一致。

3.其他自定义参数
通过Windows Microsoft aik,你还可以自己添加一些参数。例如第一次显示桌面之前,运行的命令或者脚本:

<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<CommandLine>c:\run.bat</CommandLine>
<Description>FirstLogonCommands</Description>
<Order>1</Order>
</SynchronousCommand>
</FirstLogonCommands>

关于系统封装自定义的教程很多,可以自行查阅。

最后,将修改好的文件复制到DD镜像的Windows\Panther文件夹下即可,如果没有该文件夹,还需要自己新建。

PS.
在线制作无人值守自动应答文件:
www.windowsafg.com

制作压缩文件

选择控制面板–>系统安全–>管理工具–>创建并格式化硬盘分区–>分离VHD。

卸载掉VHD磁盘后,保存的文件2008.vhd就是一个可以DD的镜像文件,但是它有10G大小,我们还需要进行压缩。

点选2008.vhd–>右键7zip–>添加压缩包–>压缩格式选择gzip,压缩等级选择最大压缩等级,其他选项默认–>确认。

等待压缩完成后,形成的2008.vhd.gz就是最终的DD文件,我们可以改名为2008.gz,方便之后DD命令输入。

7zip如果压缩报错,用管理员模式启动即可。
转载更多文章https://www.fmqcloud.com

Windows PowerShell 升级支持Win7/Win8/Server 2008 R2/Server 2012/Server 2012 R2系统

因为Windows PowerShell批量创建Office 365 子账户需要,但是本人系统是WIN7 SP1,操作Windows PowerShell一直错误,刚刚有人提醒萌加大佬博客有个文章详细介绍升级Windows PowerShell,立即转存先。

因为有些ps1脚本(PowerShell)很强大,但是只能在较高版本的PowerShell上才能正常运行.
升级很简单,只需要下载对应的补丁包和安装 .Net 4.5.2 即可.

安装 .Net 4.5.2 全量包.
注意: 安装期间可能会要求打开 Windows Update 服务.
点此下载 NDP452-KB2901907-x86-x64-AllOS-ENU.exe

下载安装对应系统的升级补丁
说明: 按补丁包文件名下载适用的补丁包.
x64 为 64位系统
x86 为 32位系统
W2K8R2 为 WindowsServer 2008 R2
W2K12 为 WindowsServer 2012
W2K12R2 为 WindowsServer 2012 R2

升级 PowerShell 的补丁包
Win7AndW2K8R2-KB3191566-x64.zip
Win7-KB3191566-x86.zip
Win8.1AndW2K12R2-KB3191564-x64.msu
Win8.1-KB3191564-x86.msu
W2K12-KB3191565-x64.msu

文章原文https://moeclub.org/2019/03/06/741/?spm=18.3