ssh
openssh 套件中的客户端连接工具ssh-keyscan
ssh-copy-id
ssh-keygen
为 SSH 生成、管理和转换认证密钥ssh-add
把专用密钥添加到 ssh-agent
的高速缓存中ssh-agent
控制用来保存公钥身份验证所使用的私钥程序curl
命令是一个利用 URL 规则在命令行下工作的文件传输工具。
# 文件下载(不显示进度)curl URL --silent# 使用选项 -o 将下载的数据写入到文件,必须使用文件的绝对地址curl http://example.com/text.iso --o filename.iso --progress# 使用选项 -H 设置请求的头部信息curl -H "accept-language:zh-cn" URL# 读取本地文本文件的数据,向服务器发送curl -d '@data.txt' https://example.com/upload# JSON 格式的 POST 请求curl -l -H "Content-Type: application/json" -X POST -d '{"phone": "13800138000", "password": "test"}' https://example.com/api/users.json# 将 Cookie 写入文件curl -c cookies.txt https://www.mrsingsing.com# 上传二进制文件# 下面的命令会给 HTTP 请求加上标头 Content-Type: multipart/form-data,然后将文件 photo.png 作为 file 字段上传curl -F 'file=@photo.png' https://mrsingsing.com/profile# 调试参数curl -v https://www.example.com# 获取本机外网 IPcurl ipecho.net/plaincurl -L ip.tool.lu
请求后打印本次请求的统计数据到标准输出
curl -w https://www.mrsingsing.com
curl 提供了很多置换变量,可以在格式化字符串中通过 %{var} 的形式使用。完整的变量列表可以在 curl 的 manpage 中查看。简单介绍一下我们使用的这几个变量:
url_effective
: 执行完地址重定向之后的最终 URL;time_namelookup
: 从请求开始至完成名称解析所花的时间,单位为秒,下同;time_redirect
: 执行所有重定向所花的时间;time_connect
: 从请求开始至建立 TCP 连接所花的时间;time_appconnect
: 从请求开始至完成 SSL/SSH 握手所花的时间;time_pretransfer
: 从请求开始至服务器准备传送文件所花的时间,包含了传送协商时间;time_starttransfer
: 从请求开始至服务器准备传送第一个字节所花的时间;time_total
: 完整耗时。然后执行请求,通过 @filename
指定保存了格式化字符串的文件:
curl -L -s -w @fmt.txt -o /dev/null https://www.mrsingsing.com
Linux 系统下载文件工具。
你想要在服务器上安装 JDK,不会现在本地下载下来,然后使用 scp 传到服务器上吧(有时候不得不这样)。wget 命令可以让你直接使用命令下载文件,并支持断点续传。
# 下载单个文件wget http://www.jsdig.com/testfile.zip# 下载并以不同的文件名保存wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080# 限速下载wget --limit-rate=300k http://www.jsdig.com/download.aspx?id=1080# 断点续传wget -c http://www.jsdig.com/testfile.zip# FTP 下载wget --ftp-user=USERNAME --ftp-parssword=PASSWORD url
防火墙分为软件防火墙和硬件防火墙。
防火墙又可以分为包过滤防火墙和应用层的防火墙。
iptables
firewallD
(底层使用 netfilter
)规则表:
规则链:
# 查看 filter 表的几条链规则(INPUT 链可以看出开放了哪些端口)iptables -t filter -L -n# filter 表是默认查询的表,可以省略 -t 选项iptables -L -n# 查看 NAT 表的链规则iptables -t nat -L -n# 查看所有 iptables 规则iptables -vnL# 为 INPUT 链添加规则(开放 8080 端口)iptables -I INPUT -p tcp --dport 8080 -j ACCEPT# 清除防火墙所有规则# 删除所有自定义链iptables -Fiptables -Xiptables -Z# 查找规则所在行号iptables -L INPUT --line-numbers -n# 根据行号删除过滤规则(关闭 8080 端口),下面的 1 是上面找到的规则所在的行号iptables -D INPUT 1# 放行 TCP 80 端口firewall-cmd --add-port=80/tcp --permanent# 搜索 iptables 规则# $table 改为你想搜索的表,$string 改为你要搜索的字符串iptables -L $table -v -n | grep $string
-A 参数就看成是添加一条 INPUT 的规则 -p 指定是什么协议,常用的 tcp 协议,当然也有 udp 例如 53 端口的 DNS
iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
常用的防火墙规则:
# 屏蔽某个 IP 地址iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP# 如果只想屏蔽来自某个 IP 地址的 TCP 流量,可以用 -p 指定协议iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP# 取消屏蔽某个 IP 地址iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP# 屏蔽基于某个端口的传出连接iptables -A OUTPUT -p tcp --dport xxx -j DROP# 允许基于某个端口的传入连接iptables -A INPUT -p tcp --dport xxx -j ACCEPT# 将某个服务的流量转发到另一个端口iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525# DDoS 屏蔽iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
iptables
防火墙的配置文件:
/etc/sysconfig/iptables
service iptables save | start | stop | restart
yum install iptables-services
扩展资料:
host
命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
# 基本用法host mrsingsing.com# 显示详细的 DNS 信息host -a mrsingsing.com
# 查询域名 的 A 记录# - domain 查询的域名# - dns-server 指定解析的 DNS 服务器nslookup <domain> <dns-server>nslookup baidu.comnslookup baidu.com 8.8.8.8# 查询其他记录nslookup -qt = <type> <domain>nslookup -qt=mx baidu.com 8.8.8.8# 查询更距离的信息nslookup -d <domain>nslookup -d baidu.com# 完全响应信息nslookup -debug baidu.com
type
参数:
A
:地址记录AAAA
:地址记录CNAME
:别名记录建议使用 dig 替代 nslookup
命令。
# 基本用法dig mrsingsing.com# 反向解析dig -x 140.205.94.189# 查看域授权的 DNS 服务器dig mrsingsing.com +nssearch
用于检测网络的联通情况和分析网络速度,并根据域名得到服务器 IP(不包括那些禁 ping 的网站)
# 检查网络联通ping xx.xx.xx.xxping mrsingsing.com
netstat
命令用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat
是在内核中访问网络及相关信息的程序,它能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。
netstat
从整理上来看,netstat
输出结果可以分为两个部分:
Recv-Q
和 Send-Q
指的是接收队列和发送队列。这些数字一版都应该是 0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。Proto 显示连接使用的协议,RefCnt 表示连接到本套接口上的进程号,Types 显示套接口的类型,State 显示套接口当前的状态,Path 表示连接到套接口的其它进程使用的路径名。
状态说明:
# 侦听来自远方的TCP端口的连接请求LISTEN# 再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)SYN-SENT:# 再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)SYN-RECEIVED:# 代表一个打开的连接ESTABLISHED:# 等待远程TCP连接中断请求,或先前的连接中断请求的确认FIN-WAIT-1:# 从远程TCP等待连接中断请求FIN-WAIT-2:# 等待从本地用户发来的连接中断请求CLOSE-WAIT:# 等待远程TCP对连接中断的确认CLOSING:# 等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)LAST-ACK:# 等待足够的时间以确保远程TCP接收到连接中断请求的确认TIME-WAIT:# 没有任何连接状态CLOSED:
# 显示网卡列表netstat -i# 显示网络统计netstat -s# 显示以太网统计数据(包括传送的数据报的总字节数、错误数、删除数、数据报和数量和广播的数量)netstat -e# 常用组合(l:listening;n:num;t:tcp;u:udp;p:process)netstat -lntup# 显示路由信息netstat -r# 显示机器中网络连接各个状态个数netstat -lant# 把状态取出来后使用 uniq -c 统计后再进行排序netstat -ant | awk '{print $6}' | sort | uniq -c# 查看连接某服务端口最多的 IP 地址netstat -ant | grep "192.168.25.*" | awk '{print $5}' | awk -F: '{print $1}' | sort -nr | uniq -c# 找出程序运行的端口netstat -ap | grep ssh# 或者netstat -alnt | grep tcp# 根据端口查看这个进程的 PIDnetstat -lnp | grep 8080# 查看网络状况netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
此命令,在找一些本地起了什么端口之类的问题上,作用很大。
ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。
# ssh 连接远程主机 `ssh name@ip`# 默认连接到目标主机的 22 端口ssh user@hostname# ssh 连接远主机并指定端口ssh -p 10022 user@hostname# 打开调试模式ssh -v user@hostname# 对所有请求压缩# 所有通过 ssh 发送或接收的数据将会被压缩,并且仍然是加密的。ssh -C user@hostname# 指定 ssh 源地址如果你的 ssh 客户端多于两个以上的 IP 地址,可以使用 `-b` 选项来指定一个 IP地址。# 登录远程主机后执行某个命令ssh username@hostname "ls /home/omd"# 登录远程服务器后执行某个脚本ssh username@hostname -t "bash/home/omd/ftl.bash"
查看 ssh 密钥目录
# 当前用户的 .ssh 目录ll /root/.ssh/known_hosts
# ssh 配置文件cat /etc/ssh/sshd_config# 开启 ssh 服务service sshd start# 关闭 ssh 服务service sshd stop# 在 Github 添加了公钥后进行连接,用于验证 Keyssh -T git@github.com
查看是否已经存在 SSH 密钥:
cd ~/.sshls
如果,提示不存在此目录,则进行第二步操作,否则,你本机已经存在 SSH 公钥和私钥,可以略过第二步,直接进入第三步操作。
# 生成 SSH 秘钥ssh-keygen -t rsa -C "your_email@example.com"
-t
:指定密钥类型,默认是 RSA,可以省略-C
:设置注释文字,比如邮箱-f
:指定密钥文件存储文件名根据提示,需要指定文件位置和密码,如果是你足够放心,其实都可以直接回车,不需要什么密码。执行完以后,可在 /C/Users/you/.ssh/
路径下看到刚生成的文件:id_rsa
和 id_rsa.pub
,即公钥和私钥。
# 查看是否已经添加了对应主机的 SSH 密钥ssh-keygen -F hostname# 删除对应主机的 SSH 访问密钥ssh-keygen -R hostname
ssh-add
命令用于把专用密钥添加到 ssh-agent
的高速缓存中。
# 把专用密钥添加到 ssh-agent 的高速缓存中ssh-add ~/.ssh/id_rsa# 从 ssh-agent 中删除密钥ssh-add -d ~/.ssh/id_xxx.pub# 删除 ssh-agent 中所有密钥ssh-add -D# 查看 ssh-agent 中的密钥ssh-add -l# 查看 ssh-agent 中的公钥ssh-add -L# 设置密钥超时时间,超时 ssh-agent 将自动卸载密钥ssh-add -t <life>
ssh-agent
命令是一种控制用来保存公钥身份验证所使用的私钥程序。
ssh-agent
在 X 会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到 ssh-agent
程序中。通过使用环境变量,可定位代理并在登录到其他使用 ssh
机器上时使用代理自动进行身份验证。
# 生成 Bourne Shell 风格命令输出ssh-agent -s
ifconfig
是 Linux 的网络状态查看命令
查看 IP 地址,替代品是 ip addr
命令。
eth0
第一块网卡(网络接口)
你的第一个网络接口可能叫做下面的名字:
eno1
:板载网卡ens33
:PCI-E 网卡enp0s3
:无法获取物理信息的 PCI-E 网卡CentOS 7 使用了一致性网络设备命名,以上都不匹配则使用 eth0
。
网络接口命名修改
网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响。
编辑 /etc/default/grub
文件,增加 biosdevname=0 net.ifnames=0
# 查看网络配置ifconfiglo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>inet 127.0.0.1 netmask 0xff000000inet6 ::1 prefixlen 128inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1nd6 options=201<PERFORMNUD,DAD>
en5
:网卡名称inet
:网卡 IP 地址netmask
:对应子网掩码ether
:网卡 MAC 地址RX & TX
:发送/接受数据大小# 修改网卡后重启reboot
修改网络配置
ifconfig <接口> <IP地址> [netmask 子网掩码]ifup <接口>ifdown <接口>
route
命令用于显示并设置 Linux 内核中的网络路由表。
# 不执行 DNS 反向查找,直接显示数字形式的 IP 地址route -n# 新增一条到达 244.0.0.0 的路由route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0# 屏蔽一条路由,目的地为 244.x.x.x 将被拒绝route add -net 224.0.0.0 netmask 240.0.0.0 reject
# ifconfigip addr ls# ifup eth0ip link set dev eth0 up# ifconfig eth1 10.0.0.1 netmask 255.255.255.0ip addr add 10.0.0.1/24 dev eth1# route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1ip route add 10.0.0/24 via 192.168.0.1