单次任务
[单次任务]
(https://www.jianshu.com/p/066f6aa07898
)
atd 服务负责管理单次任务
我们使用 at 这个指令来产生所要运行的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了
实际上有两个权限控制文件,规定了哪些用户可以使用,哪些用户不可以使用
规则是这样的:
一行一个用户
首先查看 /etc/at.allow 文件。
假如系统中存在此文件,就只允许在此文件的用户使用 at, 其他都拒绝。
假如没有 /etc/at.allow 文件,就看有没有 /etc/at.deny 文件。
这个文件意义就是,允许所有,拒绝部分。
就是在这个文件中的用户是被拒绝的,不在此文件中的用户是被允许的。
默认CentOS7系统是有一个空的 /etc/at.deny 文件。
意思是允许所有人使用 at 命令的意思
进行单次任务的程序是 at 命令, 管理他的服务是 atd
systemctl restart atd
systemctl enable atd
systemctl status atd
具体命令操作
[root@study ~]# at [-mldv] TIME
[root@study ~]# at -c 工作号码
选项与参数:
-m :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
-l :at -l 相当于 `atq` 命令,列出目前系统上面的所有该使用者的 at 调度;
-d :at -d 相当于 `atrm` 命令 ,可以取消一个在 `at` 调度中的工作;
-v :可以使用较明显的时间格式列出 at 调度中的工作列表;
-c :可以列出后面接的该项工作的实际指令内容。
TIME:
时间格式,可以定义出『什么时候要进行 at 這项工作』的时间.
格式有:
HH:MM 如: 04:00
在今日的 HH:MM 进行,若时间已过,则在明天的 HH:MM 进行行此工作。
HH:MM YYYY-MM-DD 如: 04:00 2019-07-28
強制在某年某月的某一天的特殊時刻進行該工作!
HH:MM[am|pm] + number [minutes|hours|days|weeks]
如:
now + 5 minutes
和
04pm + 3 days
就是說,在某個时间点『再加上几个时间后』才进行。
示例
[root@kvm-docker ~]# at now + 5 minutes
at> echo "hello" > /dev/pts/0
at> <EOT>
job 1 at Sat Jul 27 18:49:00 2019
ctrl + backspace进行删除操作
ctrl + d 退出编辑
查询:
[root@kvm-docker ~]# atq
1 Sat Jul 27 18:49:00 2019 a root
周期性的任务
循环执行的例行性工作调度则是由 cron (crond) 这个系统服务来控制的。
默认情况下,每个用户都可以通过 crontab 管理自己的计划任务。
和 at 一样,有两个文件控制权限:
/etc/cron.allow
/etc/cron.deny
使用
crontab -l 查询任务表
crontab -r 删除任务表
crontab -e 进入编辑任务表
crontab -eu 用户名 给某个用户设定一个任务
关于时间
参考: cat /etc/crontab
代表意义 分钟 小时 日期 月份 周 指令
数字范围 0-59 0-23 1-31 1-12 0-7 命令
周的数字为 0 或 7 时,都代表“星期天”的意思!
总结记忆:
分 时 日 月 星
周的数字为 0 或 7 时,都代表“星期天”的意思!
总结记忆:
分 时 日 月 星
除了数字还有几个个特殊的符号:
就是 *、/ 和 -、, ,
*代表所有的取值范围内的数字
/ 代表每的意思,*/5 表示每5个单位
- 代表从某个数字到某个数字
, 代表分隔时段的意思,就是 和 的意思
以下举几个例子说明:
每天早上6点:
0 6 * * * command
每两个小时:
0 */2 * * * command
23 点到早上7点之间每两个小时, 并且还有早上8点:
0 23-7/2,8 * * * command
每个月的 4 号的早上11点和每周的周一到周三的早上11点:
0 11 4 * 1-3 command
1月1日早上2点 30 分:
30 2 1 1 * command
注意
1.不要在统一时间段执行多个计划任务
2.将命令的错误输出重定向
*/1 * * * * /bin/echo "hello" 2> /dev/null //2表示错误输出,并放到“回收站”,1的话就表示正确输出
3.周与日月不可同时并存
网络基础配置
配置本机 IP 和主机名
系统网卡的配置文件在 /etc/sysconfig/network-scripts 目录下
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet 网络类型,不需要编辑
BOOTPROTO=none 获取地址的方式,可选值 none 表示手动配置 , dhcp 表示从 DHCP 服务器自动获取
IPADDR=192.168.1.52 本机的IP 地址
PREFIX=24 子网掩码前缀的方式,24 表示 255.255.255.0
NETMASK =255.255.255.0 子网掩码
GATEWAY=192.168.1.1 网关
DNS1=114.114.114.114 手动配置的 DNS 地址
DEFROUTE=yes
PEERDNS=no 使用这里设置的 DNS
ONBOOT=yes 是否开机激活这个网卡,假如不激活,重启网络服务也是无效的。
配置好后,需要重启网络服务才能生效
systemctl restart network # 字符界面下
备用的相关网络配置
/etc/resolve.conf
配置主机名
文件 /etc/hostname
命令行设置主机名
hostnamectl set-hostname sharkhost
获取主机名
hostname
或者
hostnamectl
配置本机解析主机名
文件路径 /etc/hosts
配置好自己或者别人的ip 加名字,然后直接ping 那个名字就行
网络基础配置命令
IP
iproute 软件包 提供 ip 命令
给网卡接口配置 IP 地址,一个网卡可以配置多个 ip
ip addr add 192.168.0.193/24 dev enp0s3
删除一个网卡接口上的一个 IP 地址
ip addr del 192.168.0.193/24 dev enp0s3
查看指定网卡接口上的 IP 地址
ip addr show enp0s3
查看一个 ip 的路由路径
~ ip route get 220.181.111.188
百度的ip 从 本机的 网关IP 本机的设备 到 本机的 ip
220.181.111.188 via 172.16.153.2 dev bond0 src 172.16.153.129
cache
查看本机的路由表
ip route show
default via 10.0.122.1 dev enp0s3 proto static metric 100
默认路由 网关的 ip 本机设备 enp0s3 路由协议 静态的
10.0.122.0/24 dev enp0s3 proto kernel scope link src 10.0.122.133 metric 100
目标网络号 本机设备 enp0s3 内核转发 源地址是 10.0.122.133
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.193
网卡上有的网络,内核都会自动有一条路由
设置默认路由
添加
ip route add default via 10.0.122.1 dev enp0s3
删除
ip route del default via 10.0.122.1 dev enp0s3
使用 ip 命令的 neigh 选项,你可以查看接入本机所在的局域网的其他设备的MAC地址
~ ip neigh
10.0.122.1 dev enp0s3 lladdr f0:98:38:3f:49:23 STALE
10.0.122.124 dev enp0s3 lladdr 84:2b:2b:1a:8e:80 REACHABLE
10.0.122.143 dev enp0s3 lladdr 28:d2:44:06:46:6f STALE
10.0.122.166 dev enp0s3 lladdr 00:0e:c6:d6:4c:83 REACHABLE
查看本机监听的端口
ss -l 显示本地打开的所有处于 LISTEN 监听状态的端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
ss -s 列出当前socket详细信息
ss -n 监听端口用数字表示
sshd 服务
[sshd服务]
(https://www.jianshu.com/p/85a956108421)
配置文件 /etc/ssh/sshd_config
加速 SSH 的连接
GSSAPIAuthentication no
登录的基本操作
以密码认证方式登录到远程服务器(ssh 服务端)
场景1:
ssh 客户端使用 root 用户连接到 ssh 服务端,假设服务端 ip 为 10.0.122.133
先决条件:
服务端有 root 用户
服务端开启了 sshd 服务,默认监听端口 22
客户端有个 ssh 客户端工具
1.首先在 客户端为当前的用户创建密钥对
ssh-keygen
此时,当前用户的家目录的 .ssh 目录下就会有密钥对
id_rsa 私钥
id_rsa.pub 公钥
公钥用于非密码认证方式时,传送给对方,作为信任的凭证。
私钥会报存到本地
2.以 服务端的用户 root 连接到 服务端
ssh root@服务端ip
或者
ssh root@服务端主机名
这里服务端的主机名必须可以被客户端主机正确解析
假如第一次连接会得到一个提示。
大致的意思是,要不要信任 ssh 服务端的公钥。信任输入 yes。
此时,客户端会把 服务端的 公钥存放在当前用户家目录下的 .ssh/known_hosts
文件中,一行一个主机。
3.输入密码即可
端口登陆
去掉注释#就可以执行
重启服务
systemctl restart sshd
检查监听端口
客户端连接
ssh -p 22 root@10.0.122.102
以公钥的方式认证方式登录到远程服务器(ssh 服务端)
客户端需要发送自己的公钥给服务端,服务端接收后会保存在用户家目录中的 .ssh/authorized_keys 文件中
ssh-copy-id root@10.0.122.102
ssh-copy-id 服务端用户@服务端ip
登录验证
ssh root@10.0.122.102
scp 传输文件
scp 是基于 ssh 协议的,可以实现客户端和服务端的文件传输
拷贝客户端到服务端
下面是把客户端的当前目录下的文件 local_file.txt 传输到服务端的 /tmp/ 目录下,文件名不变
scp local_file.txt root@10.0.122.133:/tmp/
假如指定端口
scp -P 2222 local_file.txt root@10.0.122.133:/tmp/
拷贝服务端文件到客户端
下面的命令是把服务端的文件 /tmp/local_file.txt 传输到客户端的当前操作命令的目录下
scp root@10.0.122.133:/tmp/local_file.txt .
假如指定端口
scp -P 2222 root@10.0.122.133:/tmp/local_file.txt .
常用配置参数
1\. SSH Server 的设置,包含使用的 port 啦,以及使用的密碼演算方式
Port 22
# SSH 默认监听 22 這個port,也可以使用多個port,即重複使用 port 這個設定項目!
# 例如想要開放 sshd 在 22 與 443 ,則多加一行內容為:『 Port 443 』
# 然後重新啟動 sshd 這樣就好了!不過,不建議修改 port number 啦!
Protocol 2
# 選擇的 SSH 協定版本,可以是 1 也可以是 2 ,CentOS 5.x 預設是僅支援 V2。
# 如果想要支援舊版 V1 ,就得要使用『 Protocol 2,1 』才行。
ListenAddress 0.0.0.0
# 監聽的主機介面卡!舉個例子來說,如果你有兩個 IP,分別是 192.168.1.100 及 192.168.100.254,假設你只想要讓 192.168.1.100 可以監聽 sshd ,那就這樣寫:
# 『 ListenAddress 192.168.1.100 』預設值是監聽所有介面的 SSH 要求
PidFile /var/run/sshd.pid
# 可以放置 SSHD 這個 PID 的檔案!上述為預設值
LoginGraceTime 2m
# 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,
# 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則預設時間為秒!
Compression delayed
# 指定何時開始使用壓縮資料模式進行傳輸。有 yes, no 與登入後才將資料壓縮 (delayed)
2\. 說明主機的 Private Key 放置的檔案,預設使用下面的檔案即可!
HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰
# 還記得我們在主機的 SSH 連線流程裡面談到的,這裡就是 Host Key ~
3\. 關於登錄檔的訊息資料放置與 daemon 的名稱!
SyslogFacility AUTHPRIV
# 當有人使用 SSH 登入系統的時候,SSH 會記錄資訊,這個資訊要記錄在什麼 daemon name
# 底下?預設是以 AUTH 來設定的,即是 /var/log/secure 裡面!什麼?忘記了!
# 回到 [Linux 基礎](http://linux.vbird.org/linux_basic/)去翻一下。其他可用的 daemon name 為:
DAEMON,USER,AUTH, LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO
# 登錄記錄的等級!嘿嘿!任何訊息!同樣的,忘記了就回去參考!
4\. 安全設定項目!極重要!
4.1 登入設定部分
PermitRootLogin yes
# 是否允許 root 登入!預設是允許的,但是建議設定成 no!
StrictModes yes
# 是否讓 sshd 去檢查使用者家目錄或相關檔案的權限資料,
# 這是為了擔心使用者將某些重要檔案的權限設錯,可能會導致一些問題所致。
# 例如使用者的 ~.ssh/ 權限設錯時,某些特殊情況下會不許用戶登入
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 是否允許用戶自行使用成對的金鑰系統進行登入行為,僅針對 version 2。
# 至於自製的公鑰資料就放置於使用者家目錄下的 .ssh/authorized_keys 內
PasswordAuthentication yes
# 密碼驗證當然是需要的!所以這裡寫 yes 囉!
PermitEmptyPasswords no
# 若上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,
# 這個項目在是否允許以空的密碼登入!當然不許!
4.2 認證部分
RhostsAuthentication no
# 本機系統不使用 .rhosts,因為僅使用 .rhosts太不安全了,所以這裡一定要設定為 no
IgnoreRhosts yes
# 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是!
RhostsRSAAuthentication no #
# 這個選項是專門給 version 1 用的,使用 rhosts 檔案在 /etc/hosts.equiv
# 配合 RSA 演算方式來進行認證!不要使用啊!
HostbasedAuthentication no
# 這個項目與上面的項目類似,不過是給 version 2 使用的!
IgnoreUserKnownHosts no
# 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容?
# 當然不要忽略,所以這裡就是 no 啦!
ChallengeResponseAuthentication no
# 允許任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
# 但目前我們比較喜歡使用 PAM 模組幫忙管理認證,因此這個選項可以設定為 no 喔!
UsePAM yes
# 利用 PAM 管理使用者認證有很多好處,可以記錄與管理。
# 所以這裡我們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定為 no
4.3 與 Kerberos 有關的參數設定!因為我們沒有 Kerberos 主機,所以底下不用設定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
4.4 底下是有關在 X-Window 底下使用的相關設定!
X11Forwarding yes
#X11DisplayOffset 10
# X11UseLocalhost yes
# 比較重要的是 X11Forwarding 項目,他可以讓視窗的資料透過 ssh 通道來傳送喔!
4.5 登入後的項目:
PrintMotd yes
# 登入後是否顯示出一些資訊呢?例如上次登入的時間、地點等等,預設是 yes
# 亦即是列印出 /etc/motd 這個檔案的內容。但是,如果為了安全,可以考慮改為 no !
PrintLastLog yes
# 顯示上次登入的資訊!可以啊!預設也是 yes !
TCPKeepAlive yes
# 當達成連線後,伺服器會一直傳送 TCP 封包給用戶端藉以判斷對方式否一直存在連線。
# 不過,如果連線時中間的路由器暫時停止服務幾秒鐘,也會讓連線中斷喔!
# 在這個情況下,任何一端死掉後,SSH可以立刻知道!而不會有僵屍程序的發生!
# 但如果你的網路或路由器常常不穩定,那麼可以設定為 no 的啦!
UsePrivilegeSeparation yes
# 是否使用權限較低的程序來提供使用者操作。我們知道 sshd 啟動在 port 22 ,
# 因此啟動的程序是屬於 root 的身份。那麼當 student 登入後,這個設定值
# 會讓 sshd 產生一個屬於 sutdent 的 sshd 程序來使用,對系統較安全
MaxStartups 10
# 同時允許幾個尚未登入的連線畫面?當我們連上 SSH ,但是尚未輸入密碼時,
# 這個時候就是我們所謂的連線畫面啦!在這個連線畫面中,為了保護主機,
# 所以需要設定最大值,預設最多十個連線畫面,而已經建立連線的不計算在這十個當中
4.6 關於使用者抵擋的設定項目:
DenyUsers *
# 設定受抵擋的使用者名稱,如果是全部的使用者,那就是全部擋吧!
# 若是部分使用者,可以將該帳號填入!例如下列!
DenyUsers test
DenyGroups test
# 與 DenyUsers 相同!僅抵擋幾個群組而已!
5\. 關於 SFTP 服務與其他的設定項目!
Subsystem sftp /usr/lib/ssh/sftp-server
UseDNS yes
# 一般來說,為了要判斷用戶端來源是正常合法的,因此會使用 DNS 去反查用戶端的主機名
# 不過如果是在內網互連,這項目設定為 no 会连接建立的速度比較快。
写一个脚本实现免密登陆
auto_keygen (){
/usr/bin/expect<<EOF
set timeout 30
spawn ssh-keygen
expect {
".ssh/id_rsa)" { send "\n"; exp_continue }
"Overwrite (y/n)?" { send "y\n"; exp_continue }
"no passphrase):" { send "\n"; exp_continue }
"again:" { send "\n"; exp_continue }
}
EOF
}
# 写个自动免密登录的函数
send_key () {
/usr/bin/expect <<EOF
# 发送公钥给对方服务器
spawn ssh rourou@$ip
expect {
"yes/no" { send "yes\n"; exp_continue }
"password:" { send "${pwds}\n"; exp_continue} }
EOF
}
# 定义一个变量,其值是当前用户的公钥文件
pub_key_file=$HOME/.ssh/id_rsa.pub
# 假如公钥文件不存在,说明需要创建密钥对
#if [ ! -f ${pub_key_file} ];then
# auto_keygen
#fi
# 循环一个存放 ip 地址的文件,并且把每个 IP地址传递给 函数
for ip in $(cat ./ips.txt)
do
send_key $ip
done
for pwds in $(cat ./pwd.txt)
do
send_key $pwds
done
send_key
需要建立 ip.txt 和 pwd.txt 两个文件来记录IP和密码