什麼是ssh?linux
Secure Shell,協議 做用:數據在網絡中能夠加密傳輸 實現:openssh 客戶端:openssh-client 服務器端:openssh 端口:22 實現:dropbear
遠程登陸web
telnet 明文 客戶端:telnet 服務器端:telnet-server 端口:23 默認狀況下,禁止用root使用telnet登陸系統 生產環境中使用telnet,測試和目標主機的指定端口是否能夠正常的通訊,也就是測試目標主機的指定端口是否開放(經過端口來判斷服務是否處於開啓狀態)
進程算法
守護進程:一個服務維護一個進程,讓進程工做在後臺,每一個進程都有本身的服務,可用service服務名 start|stop...進行管理 超級守護進程:一個服務維護多個進程 xinetd 瞬時守護進程:由超級守護進程負責管理的子進程就是瞬時守護進程 telnet 瞬時進程沒有本身的服務,他的啓動和管理依賴xinetd
sshshell
telnet scp 總結:ssh的功能 一、遠程登陸 二、遠程文件傳輸 三、相似於ftp的文件傳輸功能,sftp ssh的客戶端和服務器端 ssh安全 ssh v1 <<廢棄 RSA ssh v2 RSA DSA 如何經過公鑰來判斷服務器是合法的?
ssh的配置文件windows
客戶端配置文件:/etc/ssh/ssh_config 服務器端配置文件 /etc/ssh/sshd_config linux ssh客戶端收到的公鑰文件的保存位置 ~/.ssh/known_hosts ssh服務器端的ip 加密算法 祕鑰
客戶端工具1-SSHcentos
客戶端使用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
基於祕鑰作登陸認證(免密碼登陸)bash
原理: 客戶端 一對祕鑰 將公鑰保存在服務器端的對應帳戶的家目錄下的隱藏文件中(.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:指定傳遞到那個主機的那個用戶的家目錄下 工做原理: 一、將公鑰文件傳遞到服務器端 二、將傳遞的文件更名爲authorized_keys 三、修改文件的權限爲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實戰 一、配置監聽的端口 二、配置監聽的地址 三、禁止使用ssh v1 四、設置用戶白名單 五、設置空閒超時時間 六、結合防火牆設置ssd規則 七、禁止使用弱密碼(數字 字母 特殊符號 長度位8字符以上) 八、儘可能使用祕鑰認證 九、禁止使用空密碼登陸 十、禁止root遠程ssh 十一、限制嘗試次數與並行鏈接數量 十二、將日誌文件作異地備份 1三、常常分析查看日誌文件 centos6和centos7的區別 service sshd status systemctl status sshd.service
用三個虛擬機實現以下效果
一、從A主機能夠直接登陸B C 兩個主機 二、從A主機能夠直接以遠程的方式在B C 兩個主機上執行命令 3:從A主機能夠直接向B C 兩個主機發送文件 案例:讓baskup主機可使用祕鑰的方式登陸web1 web2……且以普通用戶身份 執行祕鑰分發和文件傳輸等操做 一、建立普通用戶(三個主機都建立) [root@localhost ~]# useradd tuser [root@localhost ~]# echo "123456" | passwd --stdin tuser 二、生成祕鑰對 [root@localhost ~]# su - tuser [tuser@localhost ~]$ ssh-keygen -t rsa 三、傳遞祕鑰 [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 四、登陸 [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 沒有權限 分兩步: 一、將文件傳遞到目標主機的家目錄下 二、遠程執行移動命令,將家目錄下的文件移動到目標位置 [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 <<<<<這是客戶端的配置文件 安全操做 一、修改sshd的服務端口 # vi /etc/ssh/sshd_config Port *** # service sshd restart 二、解決xshell登陸緩慢的問題 將UseDNS yes 改成 UseDNS no 將GSSAPIAuthentication 改成 GSSAPIAuthentication no 三、容許root用戶登陸 PermitRootLogin yes 改成no 後root用戶登陸不了系統