1. 程式人生 > >Shell筆記系列六

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指令碼攻略》