ssh免密鑰之上廁所


ssh服務簡單介紹

SSH協議框架中最主要的部分是三個協議:

*傳輸層協議(The Transport Layer Protocol)提供服務器認證,數據機密性,信息完整性等的支持;

*用戶認證協議(The User Authentication Protocol)則為服務器提供客戶端的身份鑒別;

*連接協議(The Connection Protocol)將加密的信息隧道復用成若干個邏輯通道,提供給更高層的應用協議使用;各種高層應用協議可以相對地獨立於SSH基本體系之外,並依靠這個基本框架,通過連接協議使用SSH的安全機制。

同時SSH協議框架中還為許多高層的網絡安全應用協議提供擴展的支持。它們之間的層次關系可以用如下圖來表示:

一,ssh建立鏈接過程

 

 

1.服務器上產生公鑰
2.客戶端帶着私鑰訪問服務器
3.服務器上公鑰返回給客戶端,並且用自己的公鑰和客戶端發來的私鑰生成key pair
4.客戶端再次帶着自己的私鑰和服務器發來的公鑰生成key pair訪問服務器
5.服務器用自己的key pair和客戶端的key pair進行比對,建立鏈接
注意:
在第一次鏈接的時候,會在本地生成密鑰文件/.ssh/known_hosts(可以存放多個)

 

二,ssh生成密鑰對過程

 

 

1.客戶端 ssh-keygen -t dsa
生成2個文件,id_dsa(私鑰),id_dsa_pub(公鑰)
2.客戶端 發送公鑰到服務器端
3.客戶端 帶着公鑰發送鏈接請求
4.驗證公鑰
5.服務器 用公鑰加密質詢,發送至客戶端
6.客戶端 用私鑰解密質詢
7.客戶端 將解密后的質詢發送回服務器
8.服務器 驗證質詢
9.驗證通過,鏈接建立

三,sshd_config配置文件可修改地方

1.#Port 22
2.PermitRootLogin yes  默認是打開的,就是允許客戶端用root鏈接
3.#PermitEmptyPasswords no 是否允許空密碼
下面是可以解決鏈接慢
1.UseDNS no 拒絕域名解析
2.GSSAPICleanupCredentials no

四,客戶端鏈接ssh基本語法

1.指定端口的鏈接,會跳到鏈接的機子上
ssh -p22 user@ip -p指定端口,默認即位22
2.在鏈接的機子上執行命令,不會跳到鏈接的機子上
ssh -p22 user@ip command

五,基於ssh加密的scp命令

1.推:scp -P22 /etc/file user@ip:/tmp -P這個指定端口是大寫p
2.拉:scp -P22 user@ip:/tmp/file /etc/
3.參數介紹:
-r遞歸,表示拷貝目錄
-p表示拷貝前后保持文件目錄屬性
-l limit限制速度
通常scp -P22 -rp 即可
4.scp每次都是全量的拷貝,不同於rsync的增量

六,基於ssh加密的sftp遠程上傳下載(不推薦用,因為可以使用命令)

1.sftp -oPort=22 user@ip oPort指定端口
2.上傳本地文件到遠程主機
當我們鏈接上的時候,可以通過ls查看當前目錄文件
通過,put /etc/file /tmp 將本地的file上傳到遠程主機的/tmp目錄
默認如果不加/tmp,發送到/root目錄下
3.下載遠程主機文件到本地
通過,get /etc/file /tmp 將遠程主機上的file文件下載到/tmp下
默認如果不加/tmp,下載到我們開始執行鏈接命令的目錄下

七,非交互式創建密鑰

我們手動創建是通過,ssh-keygen -t dsa,然后回車
1.自動創建
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa > /dev/null 2>&1
2.將公鑰發送到遠程主機
ssh-copy-id -i .ssh/id_dsa.pub "-p22 user@ip"
發送過去后,遠程主機會產生.ssh/authorized_keys文件,權限是600,本地會多出.ssh/known_hosts文件

八,提權執行

1.直接root賬號,將sshd_config里面允許root登錄
2.sudo提權實現沒有權限的用戶拷貝
首先,配置sudoers:
終端命令;visudo,相當於配置/etc/sudoers
## Allow root to run any commands anywhere
用戶或者組 機器=授權角色 可執行命令 root ALL=(ALL) ALL joker ALL=(ALL) /usr/bin/rsync
@group ALL=(ALL) ALL
user ALL=(ALL) NOPASSWD:ALL 解釋:
第一個ALL代表機器,就是所有機器,第二個ALL代表所有角色,第三個ALL代表可以執行所有命令,NOPASSWD代表提權命令時不需要提示密碼
然后,加載sudoers文件 visudo
-C 最后,用joker用戶通過基於ssh的rsync發送文件
用戶或者組在執行授權的特殊權限命令時后格式為sudo 命令,切換到root格式為 sudo su - ,需要輸入當前用戶的密碼,而不是root密碼 ssh
-p22 -t user@ip sudo rsync ~/hosts /etc/hosts
注意
如果,提示命令找不到,很可能是環境變量導致
root下,echo $path
user下,echo $path
在user下,修改vi ~/.bash_profile,將/usr/local/sbin:/sbin:/usr/sbin加入進去
3.利用suid實現沒有權限用戶拷貝(了解即可) chmod u+s 'which rsync'

附贈基於ssh的scp推送腳本

#!/bin/bash
if [ $# -ne 2 ];then
    echo "usage:/bin/bash $0 {avg1 avg2}"
    exit 1
fi
. /etc/init.d/functions
for ip in 1 2 3
do
scp -p22 file user@ip:/tmp > /dev/null 2&1
if [ $? -eq 0 ];then
    action "fenfa hosts ip" /bin/true
else
    action "fenfa hosts ip" /bin/false
fi
done

九,非交互模式產生密鑰

1.yum install expect -y
2.mkpasswd -l 10
參數介紹,生成隨機字符串,-l是指生成多少個字符
3.簡單介紹expect的過程
首先,還是需要手動ssh-keygen生成私鑰,公鑰
然后,spawn ssh-copy-id -i id_dsa.pub "-p 22 user@ip"
     expect {
         "yes/no" {send "yes\r":exp_continue}
         "*password" {send "123\r"}
     }
     expect eof

附贈基於expect免密鑰分發腳本

#!/bin/bash
# The author is joker, which is used to manage the host.
expect_order=`which expect 1>/dev/null 2>&1`
if [ $? -eq 1 ];then
    yum install expect -y
    sleep 1
    sh $0
else
    Distribute(){
    for IP in $(cat /service/script/distribute_ip.txt);do
        Passwd=$1
        USER=$2
        expect -c "
            spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 $USER@$IP
                expect {
                    \"*yes/no*\" {send \"yes\r\"; exp_continue}
                    \"*password*\" {send \"$Passwd\r\";exp_continue}
                    \"*password*\" {send \"$Passwd\r\";}
            }
        "
        if [ $? -eq 0 ];then
            echo -e "\033[32m 綠色字,ssh $IP 鏈接成功 \033[0m"
        else
            echo -e "\033[31m 紅色字,ssh $IP 鏈接失敗,請檢查原因 \033[0m" 
        fi
    done
    }
    Distribute "Poppy1115" root
fi
###########################################
# distribute_ip.txt,注意該文件適合在同一個地區使用,內網互動,否則去除內網地址
# 外網地址 內網地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM