您好,登錄后才能下訂單哦!
什么是ssh?
SSH是Secure Shel 的縮寫,由IETF的網絡小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH是比較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。
Secure Shell,協議 作用:數據在網絡中可以加密傳輸 實現:openssh 客戶端:openssh-client 服務器端:openssh 端口:22
實現:dropbear
telnet
明文
客戶端:telnet
服務器端:telnet-server
端口:23
默認情況下,禁止用root使用telnet登錄系統
生產環境中使用telnet,測試和目標主機的指定端口是否可以正常的通信,也就是測試目標主機的指定端口是否開放(通過端口來判斷服務是否處于開啟狀態)
進程
守護進程:一個服務維護一個進程,讓進程工作在后臺,每個進程都有自己的服務,可用service服務名 start|stop...進行管理
超級守護進程:一個服務維護多個進程
xinetd
瞬時守護進程:由超級守護進程負責管理的子進程就是瞬時守護進程
telnet
瞬時進程沒有自己的服務,他的啟動和管理依賴xinetd
ssh
telnet
scp
總結:ssh的功能
1、遠程登錄
2、遠程文件傳輸
3、類似于ftp的文件傳輸功能,sftp
ssh的客戶端和服務器端
ssh安全
ssh v1 <<廢棄
RSA
ssh v2
RSA DSA
如何通過公鑰來判斷服務器是合法的?
ssh的配置文件
客戶端配置文件:/etc/ssh/ssh_config
服務器端配置文件 /etc/ssh/sshd_config
linux ssh客戶端收到的公鑰文件的保存位置
~/.ssh/known_hosts
ssh服務器端的ip 加密算法 秘鑰
客戶端工具1-SSH
客戶端使用ssh兩種使用方式
基于口令做登錄方式
基于秘鑰做登錄方式
基于口令的認證方式
格式
ssh [options][user@]host [COMMAND]
ssh [options][-l user] host [COMMAND]
說明:
user:指定以哪個用戶的身份登錄遠程主機,如果不指定user,
則是以當前系統的用戶來登錄遠程主機
command:直接在遠程主機上執行命令,執行完畢后自動退出
選項:
-p port:指定遠程主機的ssh所使用的端口,如果不指定此選項,默認連接22端口
-t :遠程執行sudo命令
客戶端配置文件
/etc/ssh/ssh_config
基于秘鑰做登錄認證(免密碼登錄)
原理:
客戶端
一對秘鑰
將公鑰保存在服務器端的對應賬戶的家目錄下的隱藏文件中(.ssh)
登錄
服務器端就會向客戶端發送質詢
服務器端會用預先保存的公鑰來加密一段數據,然后將加密數據發送給客戶端,如果客戶端可以
解密,則是合法用戶。
linux免密碼登錄實現過程
準備linux虛擬機
172.20.225.70 clinet
172.20.225.71 server
第一步:在客戶端生成一對秘鑰
#ssh-keygen -t rsa
默認秘鑰對的位置 /root/.ssh/id_rsa
id_rsa <<<秘鑰文件
id_rsa.pub <<<公鑰文件
ls ~/.ssh/
id_rsa id_rsa.pub
第二步:將公鑰文件傳到服務器端
root登錄172.20.225.70,因此,這個公鑰文件需要放在172.20.225.70的root用戶的家目錄下
ssh-copy-id [-i identifile] [user@]host
說明:-i 指定公鑰文件的
user@host:指定傳遞到那個主機的那個用戶的家目錄下
工作原理:
1、將公鑰文件傳遞到服務器端
2、將傳遞的文件改名為authorized_keys
3、修改文件的權限為600
實現命令
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.20.225.71
服務器收到客戶端的公鑰文件后,會自動改名為:authorized_keys
openssh客戶端
windows客戶端
xshell
putty
secureCRT
……
linux客戶端
ssh、sftp、scp
客戶端工具2-scp
作用:在兩個主機上互相的傳遞文件
格式:
pull(拉取):scp [options] [user@]host:/pat/to/file /path/to/save
push(推送):scp [options] /path/to/push [user@]host:/path/to/save
選項:
-r:遞歸
-t:保留文件的屬性不變(權限、時間戳)
-q:靜默模式
-P port:指定使用的端口(默認使用22端口)
推送例子:將本地文件/root/new1.txt推送到172.20.225.71的tmp目錄下
#scp /root/new1.txt root@172.20.225.71:/tmp/
拉取例子:將172.20.225.71下/root/11.sh 拉取到本機/home/下
#scp root@172.20.225.71:/root/11.sh /home
客戶端工具3-sftp
格式:sftp IP
ssh的服務器端的配置文件
/etc/ssh/sshd_config
#Port 22 <<<< ssh服務所監聽的端口
#ListenAddress 0.0.0.0 <<<< ssh服務所監聽的地址
#PermitRootLogin yes <<<< 是否允許root遠程登錄
#MaxAuthTries 6 <<<< 指定最大嘗試次數
#MaxSessions 10 <<<< 最大并行連接會話數量(同時多少個用戶嘗試連接服務器)
AuthorizedKeysFile .ssh/authorized_keys <<<<指定秘鑰認證文件名稱和路徑
#PubkeyAuthentication yes <<<< 是否支持秘鑰認證
PasswordAuthentication yes <<<< 是否支持口令認證
#UseDNS no <<<< 禁止做DNS反向解析
#ClientAliveInterval 0 <<<< 設置ssh登錄的空閑超時時間,單位是秒
變量:TMOUT=xx
#AllowUsers= user1 user2 …… <<<< 設置白名單
#AllowGroups=gp1 gp2 <<<< 設置白名單
#DenyUsers= user1 user2 <<<< 設置黑名單
#DenyGroups=gp1 gp2 <<<< 設置黑名單
#PermitEmptyPasswords no <<<< 設置是否允許空密碼
日志設施
記錄日志的方式
SyslogFacility AUTHPRIV
AUTHPRIV意味著日志信息會記錄到/var/log/secure
ssh服務器端日志
/var/log/secure
這個日志需要經常看
普通用戶沒有權限查看和修改
配置ssh實戰
1、配置監聽的端口
2、配置監聽的地址
3、禁止使用ssh v1
4、設置用戶白名單
5、設置空閑超時時間
6、結合防火墻設置ssd規則
7、禁止使用弱密碼(數字 字母 特殊符號 長度位8字符以上)
8、盡量使用秘鑰認證
9、禁止使用空密碼登錄
10、禁止root遠程ssh
11、限制嘗試次數與并行連接數量
12、將日志文件做異地備份
13、經常分析查看日志文件
centos6和centos7的區別
service sshd status
systemctl status sshd.service
用三個虛擬機實現如下效果
1、從A主機可以直接登錄B C 兩個主機
2、從A主機可以直接以遠程的方式在B C 兩個主機上執行命令
3:從A主機可以直接向B C 兩個主機發送文件
案例:讓baskup主機可以使用秘鑰的方式登錄web1 web2……且以普通用戶身份
執行秘鑰分發和文件傳輸等操作
1、創建普通用戶(三個主機都創建)
[root@localhost ~]# useradd tuser
[root@localhost ~]# echo "123456" | passwd --stdin tuser
2、生成秘鑰對
[root@localhost ~]# su - tuser
[tuser@localhost ~]$ ssh-keygen -t rsa
3、傳遞秘鑰
[tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.70
[tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.71
4、登錄
[tuser@localhost ~]$ ssh root@172.20.225.70
root@172.20.225.70's password:
免密登錄
[tuser@localhost ~]$ ssh tuser@172.20.225.70
[tuser@client ~]$
總結:在進行登錄的時候,必須保證當前用戶的家目錄下有.ssh/id_rsa
在對方主機的指定用戶的家目錄下,必須要有公鑰文件.ssh/authorized_keys
[tuser@localhost root]$ ssh tuser@172.20.225.70 '/sbin/ip add'
[tuser@localhost root]$ ssh tuser@172.20.225.71 '/sbin/ip add'
批量獲取主機的信息
userName="tuser"
for i in 67 68 69 70 71
do
ip="172.20.225.$i"
if ! ping -c1 -W1 $ip &>/dev/null;then
echo "The host $ip is not exist."
else
res=`ssh ${userName}@${ip} '/bin/df -h | grep sda1'`
echo "==========================ip:$ip====================="
echo "The disk use infomation:$res"
fi
done
批量向主機傳遞文件
讓用戶輸入一個文件,則將文件傳遞到所有的主機
如果傳輸成功,提示綠色成功,如果傳輸失敗,提示紅色失敗,如果文件不存在,則提示無此文件。
#!/bin/bash
#author:lichao
#date:20190809
#function: use ssh to send file
#mail:chao.il@qq.com
userName="tuser"
funFile=/etc/init.d/functions
if [ ! -e $funFile ];then
echo "Error. the funcation file not exist."
exit 19
else
. $funFile
fi
read -p "Please enter a file: " fileName
if [ ! -e $fileName ];then
echo "no such file."
echo "bye."
exit 12
fi
for i in 70 71
do
ip="172.20.225.$!"
if ping -c1 -W1 $ip &>/dev/null;then
if scp -rq $fileName $userName@$ip:~/;then
action "send file to $ip" /bin/true
else
aciton "send file to $ip" /bin/false
fi
else
action "send file to $ip" /bin/false
fi
done
案例:將文件傳遞到目標主機的非家目錄下
[tuser@localhost root]$ echo "test page".test.page
test page.test.page
[tuser@localhost ~]$ scp test.page tuser@172.20.225.70:/etc/
scp: /etc//test.page: Permission denied
[tuser@localhost ~]$ scp test.page tuser@172.20.225.70:~/
test.page
沒有權限
分兩步:
1、將文件傳遞到目標主機的家目錄下
2、遠程執行移動命令,將家目錄下的文件移動到目標位置
[tuser@localhost ~]$ scp test.page2 tuser@172.20.225.70:~/
test.page2 100% 10 10.8KB/s 00:00
bash-4.2# ls /home/tuser/
.bash_history .bash_logout .bash_profile .bashrc .ssh/ test.page test.page2
bash-4.2# visudo
tuser ALL=(ALL) NOPASSWD: /bin/mv
[tuser@localhost ~]$ ssh -t tuser@172.20.225.70 'sudo mv ~/test.page2 /etc/'
Connection to 172.20.225.70 closed.
bash-4.2# ls /etc/te
terminfo/ test.page1 test.page2
配置sshd服務
端口
0-65535
小于1024的端口:是由系統保留使用的
自定義端口通常用1024以上的端口
端口的作用:在系統當中唯一的標識一個進程
這樣就可以現實將發送給指定端口的數據轉發到指定的進程中
系統中每個進程在啟動的時候,會自動個向注冊使用一個端口,當有發送到這個端口的數據的時候,
內核會根據端口的記錄轉發給指定的進程。
一個主機向另一個主機發送數據包的時候,在數據包中已經指定了這個數據包是給多少號端口的
作用:用來實現讓客戶端使用22端口來遠程登錄
配置文件:
/etc/ssh/sshd_config <<<<<這是服務端的配置文件
/etc/ssh/ssh_config <<<<<這是客戶端的配置文件
安全操作
1、修改sshd的服務端口
# vi /etc/ssh/sshd_config
Port ***
# service sshd restart
2、解決xshell登錄緩慢的問題
將UseDNS yes 改為 UseDNS no
將GSSAPIAuthentication 改為 GSSAPIAuthentication no
3、允許root用戶登錄
PermitRootLogin yes 改為no 后root用戶登錄不了系統
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。