Shell筆記系列六
ifconfig
用於配置及顯示網路介面,子網掩碼等細節資訊,它通常位於/sbin/ifconfig中。
[[email protected] ~]$ ifconfig ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.192.191 netmask 255.255.255.0 broadcast 192.168.192.255 inet6 fe80::c165:577c:9253:847d prefixlen 64 scopeid 0x20<link> ether 00:0c:29:37:5d:63 txqueuelen 1000 (Ethernet) RX packets 88 bytes 14165 (13.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 89 bytes 10542 (10.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 68 bytes 5920 (5.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 68 bytes 5920 (5.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens32為網絡卡的名字,inet為IPV4地址192.168.192.191,閘道器255,255,255,255,廣播地址為192.168.192.255.
設定網路介面的IP地址,注意執行此操作需要使用root許可權。也可以使用netmask設定子網掩碼
[[email protected] ~]$ ifconfig virbr0 192.168.122.2
SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
域名服務
將IP地址對映為符號名稱叫做域名服務,名字伺服器是在檔案/etc/resolv.conf中定義:
[[email protected] ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.192.2
新增名字伺服器使用以下命令
sudo echo nameserver IP_ADDRESS >> /etc/resolv.conf
或者直接修改resolv.conf檔案即可。
host
用於列出某個域名對應的所有IP地址,(nslookup)命令也可以完成名字與IP地址之間的相互對映。
[[email protected] ~]$ host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.125
www.a.shifen.com has address 61.135.169.121
[[email protected] ~]$
也可以在/etc/hosts中加入條目來實現名字解析,格式為:
IP_ADDRESS name1 name2
route
顯示路由表的資訊,路由表記錄著資訊從哪去哪
[[email protected] ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens32
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.192.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
ping
用於檢查網路上主機之間的連通性,ping命令使用Internet控制訊息協議(ICMP)中的echo分組檢查網路上兩臺主機之間的連通性。
檢查某臺主機是否可達:ping ADDRESS,預設情況下,ping會連續傳送分組,迴應資訊將被列印在終端上,可用Ctrl+C來停止ping命令。
[[email protected] ~]$ ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=128 time=18.2 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=128 time=2.68 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=128 time=7.97 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=128 time=2.48 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=128 time=3.66 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4016ms
rtt min/avg/max/mdev = 2.480/7.020/18.294/5.978 ms
ping命令資訊解釋:
64 bytes即返回的資料,61.135.169.121即目標主機,icmp_seq即序列號,ping發出的每個分組都有一個序列號,從1開始,指導ping結束。ttl(Time To Live)生存時間,ping命令傳送的每個分組都有一個可以在被丟棄前完成的條數,這個值是預先定義好的,分組途徑的每個路由器會將該值減1,表明發出ping命令的主機和目的主機之間相隔了多少個路由器。
-c 選線可以指定傳送的分組數量
traceroute
用於顯示分組途徑的所有閘道器的地址,
[[email protected] ~]$ traceroute google.com
traceroute to google.com (216.58.197.110), 30 hops max, 60 byte packets
1 gateway (192.168.192.2) 0.121 ms 0.158 ms 0.075 ms
2 * * *
3 * * *
4 * * *
5 * * *
ssh
SSH代表的是Secure Shell,使用加密隧道連線兩臺計算機,ssh能夠讓你訪問遠端計算機的shell,從而在其上執行互動命令並接受結果,或啟動互動會話。GNU/Linux釋出版中預設不包含SSH,需要自己安裝,SSH服務執行在埠22上。
[[email protected] ~]$ ssh [email protected]
The authenticity of host '192.168.192.134 (192.168.192.134)' can't be established.
ECDSA key fingerprint is SHA256:/yJdpunmxQXFzsHp4Yxh38BnVTIxl5g*************.
ECDSA key fingerprint is MD5:f2:11:b7:fc:d4:ea:c9:d8:30**********************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.192.134' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Wed Dec 12 20:06:57 2018
也可以不登入,直接執行相應的命令,並將結果返回給終端
[[email protected] ~]$ ssh [email protected] 'ls'
[email protected]'s password:
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
test
Videos
ftp/sftp
ftp(file transfer Protocol)檔案傳輸協議,用於檔案共享,FTP伺服器通常執行在21埠,遠端主機上必須安裝並執行ftp伺服器才能使用ftp.sftp是一個執行在SSH連線之上並模擬FTP介面的檔案傳輸胸,它不需要遠端執行ftp伺服器來進行檔案傳輸,但必須有SSH伺服器。
[[email protected] ~]$ sftp [email protected]
[email protected]'s password:
Connected to 192.168.192.134.
sftp> dir
Desktop Documents Downloads Music Pictures Public Templates Videos test
sftp>
SCP
SCP是Secure Copy Program 安全複製程式,scp是一個安全的檔案複製命令,檔案通過SSH加密通道進行傳輸。
[[email protected] test]$ scp hello.txt [email protected]:/home/land/test/
[email protected]'s password:
hello.txt 100% 16 15.2KB/s 00:00
如果想要複製目錄,則可以使用-r選項,在兩臺網路主機間以遞迴形式複製目錄
scp -r /home/[email protected]:/home/land/test
實現SSH的免密碼自動登入
ssh的使用過程中,通常使用使用者名稱和密碼進行認證,在終端進行互動式訪問可以,但是如果在指令碼中使用ssh,則輸入使用者名稱和密碼就比較麻煩,所以可以進行配置,實現免密碼登入。
ssh使用了非對稱加密技術,即使用公鑰和私鑰,公鑰分配給網路中的指定範圍的使用者,私鑰則自身儲存,例如:當B想和A通訊,B使用A的公鑰,對資訊進行加密,並將資訊傳送給A,如果資訊被C截獲,但是因為C沒有A的私鑰,所以不能對資訊進行解密,只有A收到資訊後,才可以對加密的資訊使用私鑰進行解讀。所以,如果想實現免密碼登入,則公鑰應該放在伺服器中(即加入檔案~/.ssh/authorized_keys),私鑰則應該放入使用者所在的客戶機器的~/.ssh目錄中。其他的配置可在/etc/ssh/sshd_config中進行配置。
使用ssh-keygen命令可以建立一對認證金鑰。
實現步驟:
⑴在本地主機上建立SSH金鑰
⑵將生成的公鑰傳給主機並將其加入到檔案~/.ssh/autorized_keys中,
[[email protected] test]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/land/.ssh/id_rsa): yes
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in yes.
Your public key has been saved in yes.pub.
The key fingerprint is:
SHA256:CyCe21SVt9vTXRbQSDuU+GsRIUkAuZWEE9rABN34mSw [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .=oooB++o+=* |
| ++*.o.oo+.o |
| . ..+.*. ..o. .|
| . o E * . o. o|
| o . o S o .oo.|
| + . .. oo. .|
| . . . .. |
| |
| |
+----[SHA256]-----+
ssh-keygen程式會生成兩個檔案:~/.ssh/xx.pub 是公鑰 ~/.ssh/xxx 是私鑰
-rw-------. 1 land land 1675 Dec 12 21:34 yes
-rw-r--r--. 1 land land 408 Dec 12 21:34 yes.pub
使用命令新增公鑰到伺服器的~/.ssh/authorized_keys
[[email protected] test]$ ssh [email protected]_host "cat >> ~/.ssh/authorized_keys" < xxx.pub
如果私鑰沒有在~/.ssh目錄中,則需要將私鑰放入到該目錄中。
lsof
可以列出已開啟的檔案,選項-i將範圍限制在已經開啟的網路連線。由於直接輸出lsof會出現很多的資訊,所以使用管道和head只列出前幾個資訊。
[[email protected] ~]# lsof | head -5
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1612152 34349141 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20112 165272 /usr/lib64/libuuid.so.1.3.0
netstat
也可以用來檢視開放埠以及網路流量相關資訊。
[[email protected] ~]# netstat -tnp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
netcat/nc
可以建立用於在TCP/IP網路上傳輸資料的套接字,我們需要兩個套接字,一個負責偵聽連線,一個負責發起連線:
設定偵聽套接字,埠自定義,但是儘量不要使用特殊的埠
[[email protected] ~]$ nc -l 6666
連線到該套接字,指定需要連線的IP地址,如果是本地機器,則可以換成localhost
[[email protected] ~]$ nc 192.168.192.135 6666
然後就可以在兩個終端輸入資訊並按回車鍵,訊息就會發送給對方。
iptables
如果系統沒有安裝,則可以手動安裝。
如果不想訪問特定站點,可以阻止傳送到該IP地址的流量
[[email protected] ~]# iptables -A OUTPUT -d 8.8.8.8 -j DROP
[[email protected] ~]#
[[email protected] ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
阻止傳送到特定埠的流量
iptables -A OUTPUT -p tcp -dport 21 -j DROP
引數解讀:
-A表明向鏈中新增一條新的規則,鏈就是若干規則的集合,OUTPUT鏈可以控制所有的出站流量,而INPUT鏈能夠控制所有的入站流量,-d指定了所要匹配的分組目的地址,-s指定了分組的源地址,-j指示iptables執行到特定的處理。-p指定適應的協議,-dport指定了對應的埠。
參考《Linux Shell指令碼攻略》