ssh免密鑰之上廁所

ssh服務簡單介紹

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

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

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

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

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

一,ssh創建連接過程ssh

 

 

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

 

二,ssh生成密鑰對過程ui

 

 

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基本語法spa

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

五,基於ssh加密的scp命令3d

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,注意該文件適合在同一個地區使用,內網互動,不然去除內網地址
# 外網地址 內網地址
相關文章
相關標籤/搜索