1.SSH服務介紹
1.1 基本介紹
SSH服務是一種古老的基礎服務级零,是一個遠程連接Linux和管理Linux的服務铣鹏。
Secure Shell Protocol 簡寫SSH搞动,是一個安全的Shell協(xié)議玛痊,屬于TCP/IP協(xié)議族。
SSH服務使用的默認端口為22(一臺機器的不同功能就用端口區(qū)分)窗慎。
1.2網(wǎng)絡服務對應的端口介紹:
21==>ftp
22==>ssh
23==>telnet
25==>smtp(郵件發(fā)送服務)
80==>web(網(wǎng)頁服務)
111==>rpcbind
110==>pop3(郵件接收服務)
873==>rsync
3389==>windows遠程桌面
2.遠程連接服務:
telnet:數(shù)據(jù)傳輸是明文的个束,數(shù)據(jù)傳輸依靠交換機和路由器(需要事先配置交換機和路由器)劲够。
telnet ip port命令可以檢測端口以及服務是否是暢通的靠粪。
ssh協(xié)議:是一個安全的Shell協(xié)議蜡吧,在傳輸過程中數(shù)據(jù)是加密的。
服務端和客戶端稱之為c/s架構(gòu)==>client/server占键。例如:
超市收銀就是用的c/s架構(gòu)昔善,這個客戶端很強大,頁面展示都可以在客戶端畔乙。
游覽器/服務器稱之為b/s架構(gòu)==>browser/server(未來互聯(lián)網(wǎng)發(fā)展的大趨勢)耀鸦。例如:
網(wǎng)頁服務就是用的b/s架構(gòu),內(nèi)容顯示都是服務端控制的啸澡。
3.ssh服務端軟件介紹:
3.1 軟件安裝
#rpm查看如果沒有的話yum install openssh openssl -y安裝
[root@m01 ~]# rpm -qa openssh openssl
openssh-7.4p1-16.el7.x86_64
openssl-1.0.2k-16.el7.x86_64
[root@m01 ~]# ll /etc/ssh/sshd_config #<==ssh服務配置文件
-rw-------. 1 root root 3907 4月 11 2018 /etc/ssh/sshd_config
[root@m01~]# systemctl start sshd
[root@m01~]# systemctl enable sshd
3.2 ssh客戶端里含有的命令
[root@m01 ~]# rpm -ql openssh-clients
/usr/bin/scp #<==遠程拷貝文件(加密)。
/usr/bin/sftp #<==ftp服務氮帐,加密的傳輸文件嗅虏。
/usr/bin/ssh #<==遠程連接。
/usr/bin/ssh-copy-id #<==拷貝密鑰中的公鑰文件的上沐。
3.3 ssh客戶端命令介紹與實踐
ssh -p 22 root@10.0.0.31
命令 -p 端口 用戶@IP
上述命令相當于ssh 10.0.0.31
[root@m01 ~]# ssh 10.0.0.7
The authenticity of host '10.0.0.7 (10.0.0.7)' can't be established.
ECDSA key fingerprint is SHA256:qZSBkrmOv7xO/63qOU1uLXkPyNVHdkqvrNAcAmXqNEk.
ECDSA key fingerprint is MD5:23:d0:cb:a9:f4:7c:0b:eb:2d:07:00:e1:a3:12:d8:33.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.7' (ECDSA) to the list of known hosts.
root@10.0.0.7's password: #連接需要輸入密碼
Last login: Thu Apr 18 11:50:33 2019 from 10.0.0.1
[root@m01 ~]# ssh -p 22 [root@10.0.0.7](mailto:root@10.0.0.7)
root@10.0.0.7's password: #<==第二次連接就不需要輸入yes了
Last login: Fri Apr 19 21:01:09 2019 from 10.0.0.61
3.4 scp命令:遠程拷貝(secure copy)皮服,加密的拷貝
q -P 端口
q -r 遞歸
q -p 保持屬性
q -l 限制速度
q 推:scp -P 22 -rp /data root@172.16.1.7:/tmp/
類似rsync遠程shell的推送模式:
rsync -avz /data root@172.16.1.7:/opt
rsync -avz /data -e "ssh -p 22" root@172.16.1.7:/opt
q 拉:scp -P 22 -rp root@172.16.1.7:/tmp/data /tmp/
類似rsync遠程shell的拉取模式:
rsync -avz root@172.16.1.7:/opt/data /data
3.5 ssh服務配置優(yōu)化
[root@web01 /]# cat >>/etc/ssh/sshd_config<<EOF
####Start by oldboy#2018-04-26###
PermitEmptyPasswords no #<==禁止空密碼登錄,C7默認就是
UseDNS no #不使用dns解析,yes改為no
GSSAPIAuthentication no #禁止連接慢的解決配置
#ListenAddress 172.16.1.7:22
####End by oldboy#2018-04-26###
EOF
4.項目實戰(zhàn):
一参咙、借助秘鑰文件龄广,實現(xiàn)登錄的時候不用密碼,可以批量分發(fā)文件蕴侧、批量管理服務方案择同。
方案一:手動生成
1.服務端生成秘鑰對:
[root@m01 ~]# ssh-keygen #<==連續(xù)按回車就可以
[root@m01 ~]# ls /root/.ssh -l
總用量 12
-rw------- 1 root root 1679 4月 22 12:12 id_rsa #<==私鑰,鑰匙净宵。
-rw-r--r-- 1 root root 390 4月 22 12:12 id_rsa.pub #<==公鑰敲才,鎖。
-rw-r--r-- 1 root root 513 4月 22 11:45 known_hosts
2.將公鑰放到需要管理的服務器中
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.
[root@m01 ~]# ssh 172.16.1.7 "ifconfig eth1"
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.1.7 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::20c:29ff:fe57:5d16 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:57:5d:16 txqueuelen 1000 (Ethernet)
RX packets 6245 bytes 2873978 (2.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6527 bytes 2306624 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
方案二:腳本執(zhí)行自動生成秘鑰對并發(fā)送到需要管理的服務器
[root@m01 /server/scripts]# cat miyao.sh
#!/bin/bash
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
for ip in 7 8 31 41
do
sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip
done
[root@m01 /server/scripts]# sh miyao.sh
拓展知識:開發(fā)腳本實現(xiàn)批量管理服務器
[root@m01 /server/scripts]# cat viem.sh #<==批量管理腳本
for n in 7 8
do
echo -------172.16.1.$n----------
ssh 172.16.1.$n $1
done
#sh view.sh "cat /etc/redhat-release" 執(zhí)行腳本并在后面添加需要執(zhí)行的動作
[root@m01 /server/scripts]# cat fenfa.sh #<==簡單批量分發(fā)文件腳本
for n in 7 8
do
echo ----------172.16.1.$n--------
scp -P 22 -rp $1 root@172.16.1.$n:$2
done
[root@m01 /server/scripts]# cat fenfa1.sh #<==復雜批量分發(fā)文件腳本
#!/bin/sh
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "usage:$0 localfile remotedir"
exit 1
fi
for n in 31 41 51
do
scp -P 22 -rp $1 root@172.16.1.$n:$2 &>/dev/null
if [ $? -eq 0 ]
then
action "172.16.1.$n successful" /bin/true
else
action "172.16.1.$n failure" /bin/false
fi
done