mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

19_Linux基礎-ssh服務1

一。練習#

1、編寫腳本,實現批量新增用戶,用戶名以 user 開頭,具體新增用戶數量隨用戶輸入,並且為每個用戶設置隨機密碼(密碼長度為 12 位隨機字符組成),記錄創建的用戶與密碼,保存到 /tmp/user 文件中。

2、如何實現兩個字符串的拼接,兩個整數求和,以及 5 除以 3,保留 2 位小數。

3、如何計算本機有多少個用戶以及多少個普通用戶?

4、如何去除字符串中所有空格?

5、備份 /var/log/nginx/access.log 日誌,每五分鐘備份一次,並且以 2020-11-15_10_05-access.log.tar.gz 方式命名。將日誌文件備份文件放到 /nginx/ 目錄下。

6、查找 /etc/ 目錄下 10 天以內 3 天以前修改過的文件,並將這些文件記錄到 /tmp/etc_log 文件中。

1.1 編寫腳本,實現批量新增用戶,用戶名以 user 開頭,具體新增用戶數量隨用戶輸入,並且為每個用戶設置隨機密碼(密碼長度為 12 位隨機字符組成),記錄創建的用戶與密碼,保存到 /tmp/user 文件中#

題目 1:編寫腳本,實現批量新增用戶,用戶名以 user 開頭,具體新增用戶數量隨用戶輸入,並且為每個用戶設置隨機密碼(密碼長度為 12 位隨機字符組成),記錄創建的用戶與密碼,保存到 /tmp/user 文件中。

示例1
---------------------------------------------------------------------
read -p "請輸入你要添加的用戶個數:" num1
for i in `seq $num1`    # 注:循環多少次
do
        id user$i &>/dev/null
        a=`echo $?`     # 注:上條命令返回值 0 成功 非0 失敗
        str1=`date +%s+%N | md5sum|head -c 4`     # 注:%s時間戳
        if [ $a -eq 0 ] ;then
                echo "該用戶已存在,不進行新建操作"
                break
        else
                useradd user$str1$i  &>/dev/null
                b=`echo $?`
                if [ $b -eq 0 ];then
                        echo "創建成功"
                        passwd1=`mkpasswd -l 12`  # 注:mkpasswd 生成隨機12位密碼串
                        echo $passwd1 |passwd user$str1$i --stdin  &>/dev/null  # 注:--stdin 密碼從標準輸入裡面來
                        echo "user$str1$i:$passwd1" >>/tmp/user
                else
                        echo "創建失敗"
                fi
        fi
done
---------------------------------------------------------------------
[root@cPen_web lianxi]# date +%s+%N		# 注:引用納秒的概念,防止用戶名 重複
1605251515+012657467
[root@cPen_web lianxi]# man date
       %%     a literal %
       %a     locale's abbreviated weekday name (e.g., Sun)	# 注:Sun
       %A     locale's full weekday name (e.g., Sunday)		# 注:Sunday
       %s     seconds since 1970-01-01 00:00:00 UTC			# 注:時間戳 從1970年1月1號到現在的秒數
       %N     nanoseconds (000000000..999999999)			# 注:納秒  1納秒=十億分之一秒
[root@cPen_web ~]# date +%s+N | md5sum|head -c 4
2b13[root@cPen_web ~]# 

示例2
---------------------------------------------------------------------
read -p "輸入新增用戶數:" num
for i in `seq $num`
do
    useradd user$i &>/dev/null
    passwd=`mkpasswd -l 12`
    echo $passwd |passwd user$i --stdin &>/dev/null
    echo "用戶名:user$i" "密碼:$passwd" &>>/tmp/user
done

1.2 如何實現兩個字符串的拼接,兩個整數求和,以及 5 除以 3,保留 2 位小數#

題目 2:如何實現兩個字符串的拼接,兩個整數求和,以及 5 除以 3,保留 2 位小數

數值運算:https://blog.csdn.net/weixin_34408624/article/details/92598137
#注:挨在一起寫實現 2 個字符串拼接

示例
---------------------------------------------------------------------
[root@cPen_web ~]# a=abc
[root@cPen_web ~]# b=def
[root@cPen_web ~]# echo $a$b		# 注:字符串拼接
abcdef
[root@cPen_web ~]# echo abc$a
abcabc
[root@cPen_web ~]# a=3
[root@cPen_web ~]# b=4
[root@cPen_web ~]# echo $(($a+$b))
7
#注:1個括號默認是字符串拼接  不會進行數值運算
[root@cPen_web ~]# a=123			# 注:默認都是str類型
[root@cPen_web ~]# a="123"
[root@cPen_web ~]# a='123'
------------------------------------------------------------
[root@cPen_web ~]# a=123
[root@cPen_web ~]# b=4
[root@cPen_web ~]# echo $(( $a > $b ))
1											# 注:正確返回1
[root@cPen_web ~]# echo $(( $a < $b ))
0											# 注:錯誤返回0
[root@cPen_web ~]# expr $a + $b				# 注:expr命令 進行數值運算
127
[root@cPen_web ~]# echo $(( $a + $b ))		# 注:2個圓括號實現整數運算
127
[root@cPen_web ~]# echo $[ $a + $b ]		# 注:中括號實現整數運算
127
[root@cPen_web ~]# let c=$a+$b				# 注:let 也可以實現整數運算
[root@cPen_web ~]# echo $c					# 注:let只能複製 不能直接賦值
127
#注:整數運算:4種方法
[root@cPen_web ~]# expr $a + $b
[root@cPen_web ~]# echo $(( $a + $b ))
[root@cPen_web ~]# echo $[ $a + $b ]
[root@cPen_web ~]# let c=$a+$b				# 注:let只能複製 不能直接賦值
數值運算:https://blog.csdn.net/weixin_34408624/article/details/92598137
------------------------------------------------------------------------
#注:小數運算
echo "scale=3;5/3"|bc						# 注:3表示保留3位小數  5/3
[root@cPen_web ~]# echo "scale=3;5/3"|bc	# 注:確保主機上裝了bc
1.666
[root@cPen_web lianxi]# echo $((5/3))
1
[root@cPen_web lianxi]# echo |awk '{printf 5/3}'		# 注:awk默認保留5位小數
1.66667[root@cPen_web lianxi]# 
[root@cPen_web lianxi]# echo |awk '{printf "%.2f",5/3}'	# 注:保留2位小數
1.67[root@cPen_web lianxi]# 
數值運算:https://blog.csdn.net/weixin_34408624/article/details/92598137

1.3 如何計算本機有多少個用戶以及多少個普通用戶?#

題目 3:如何計算本機有多少個用戶以及多少個普通用戶?

示例
---------------------------------------------------------------------
#3、如何計算本機有多少個用戶以及多少個普通用戶?
wc -l /etc/passwd									# 注:本機有多少用戶
awk -F":" '$3>=1000{print $1}' /etc/passwd |wc -l	# 注:本機有多少普通用戶
#注:普通用戶uid>1000

1.4 如何去除字符串中所有空格?#

題目 4:如何去除字符串中所有空格?

示例
---------------------------------------------------------------------
str="s t r i n g"
echo $str |tr -d " "							# 注:-d刪除指定字符

1.5 備份 /var/log/nginx/access.log 日誌,每五分鐘備份一次,並且以 2020-11-15_10_05-access.log.tar.gz 方式命名。將日誌文件備份文件放到 /nginx/ 目錄下#

題目 5:備份 /var/log/nginx/access.log 日誌,每五分鐘備份一次,並且以 2020-11-15_10_05-access.log.tar.gz 方式命名。將日誌文件備份文件放到 /nginx/ 目錄下。

#注:確保 crontab 打開

示例
---------------------------------------------------------------------
[root@cPen_web ~]# crontab -e					# 注:計劃任務裡命令最好寫絕對路徑
*/5 * * * * tar czf /nginx/$(date +%Y-%m-%d_%H_%M-access.log.tar.gz) /var/log/nginx/access.log 

1.6 查找 /etc/ 目錄下 10 天以內 3 天以前修改過的文件,並將這些文件記錄到 /tmp/etc_log 文件中#

題目 6:查找 /etc/ 目錄下 10 天以內 3 天以前修改過的文件,並將這些文件記錄到 /tmp/etc_log 文件中

示例
---------------------------------------------------------------------
[root@cPen_web ~]# find /etc -type f -mtime -10 -mtime +3 		# 注:注意 是查找的文件
/etc/dnf/modules.d/python27.module
/etc/selinux/config
/etc/vsftpd/vsftpd.conf
/etc/dconf/db/site
/etc/dconf/db/local
/etc/dconf/db/distro
[root@cPen_web ~]# stat /etc/selinux/config 					# 注:stat看文件的原信息
………………
最近訪問:2020-11-13 10:14:37.388001468 +0800
最近更改:2020-11-05 15:12:05.484883965 +0800
最近改動:2020-11-05 15:12:05.485883965 +0800
[root@cPen_web lianxi]# find /etc -type f -mtime -10 -mtime +3 &>/tmp/etc_log 

二。練習#

請用 shell 寫出一個簡單的猜拳遊戲,枚舉值(0 石頭、1 剪刀、2 布),有兩位選手分別是 rob1、rob2,他們的出拳方式由系統自動枚舉,並連續猜十盤,最後給出十盤的結果

示例1:判定各種情況 if語句
---------------------------------------------------------------------
#!/bin/bash
echo "猜拳遊戲開始啦!!!"
echo "今天我們的兩位對手是rob1和rob2"
pingju=0
rob1_win=0
rob2_win=0
for i in `seq 10`
do
        a=`echo $[RANDOM%3]`
        b=`echo $[RANDOM%3]`
        case $a in
        0)
                c=rob1出的是石頭
                ;;
        1)
                c=rob1出的是剪刀
                ;;
        2)
                c=rob1出的是布
                ;;
        esac
        case $b in
        0)
                d=rob2出的是石頭
                ;;
        1)
                d=rob2出的是剪刀
                ;;
        2)
                d=rob2出的是布
                ;;
        esac
        if (($a==$b));then
                echo -e "$c\n$d \n他們戰平了"
                pingju=$[$pingju+1]
                continue
        fi
        if [[ $a -eq 1 || $b -eq 1 ]];then      # 注:如果1方出布
                if [[ $a -eq 0 || $b -eq 0 ]];then # 注:如果1方出拳頭
                                if  (($a>$b));then
                                        echo -e "$c\n$d,rob2獲勝"
                                        rob2_win=$[$rob2_win+1]
                                        continue
                                else
                                        echo -e "$c\n$d,rob1獲勝"
                                        rob1_win=$[$rob1_win+1]
                                        continue
                                fi
                fi
        fi
        if (($a>$b));then
                echo -e "$c\n$d,rob1獲勝"
                rob1_win=$[$rob1_win+1]
        else
                echo -e "$c\n$d,rob2獲勝"
                rob2_win=$[$rob2_win+1]
        fi

done

echo "rob1獲勝次數$rob1_win,rob2獲勝次數$rob2_win,平局次數$pingju
============================================================================================

示例2:使用減法
#注:if語句的使用
---------------------------------------------------------------------
for i in `seq 10`
do
        rob1=$(($RANDOM%3))
        echo rob1=$rob1
        rob2=$(($RANDOM%3))
        echo rob2=$rob2
        if [ $rob1 -eq $rob2 ]
        then
                echo "平局"
        elif [ $(($rob1-$rob2)) -eq -1 ] || [ $(($rob1-$rob2)) -eq 2 ]  # 注:rob1贏的情況
        then
                echo "rob1 win"
        else
                echo "rob2 win"
        fi
done
============================================================================================

示例3
---------------------------------------------------------------------
r1_win=0
r2_win=0
equal=0
for i in `seq 10`
do
    echo -ne "第$i盤\t"
    rob1_res=$(($RANDOM%3))
    rob2_res=$(($RANDOM%3))
    if [[ $(($rob1_res - $rob2_res)) = -1 ]]; then echo -ne "rob1勝\t" &&r1_win=$(($r1_win + 1)); fi
    if [[ $(($rob1_res - $rob2_res)) =  2 ]]; then echo -ne "rob1勝\t" &&r1_win=$(($r1_win + 1)); fi
    if [[ $(($rob2_res - $rob1_res)) = -1 ]]; then echo -ne "rob2勝\t" &&r2_win=$(($r2_win + 1)); fi
    if [[ $(($rob2_res - $rob1_res)) =  2 ]]; then echo -ne "rob2勝\t" &&r2_win=$(($r2_win + 1)); fi
    if [[ $(($rob1_res - $rob2_res)) =  0 ]]; then echo -ne "平局\t" && equal=$(($equal + 1)); fi
    [[ $rob1_res = 0 ]] && echo -ne "rob1:石頭\t"
    [[ $rob1_res = 1 ]] && echo -ne "rob1:剪刀\t"
    [[ $rob1_res = 2 ]] && echo -ne "rob1:布\t\t"
    [[ $rob2_res = 0 ]] && echo  "rob2:石頭"
    [[ $rob2_res = 1 ]] && echo  "rob2:剪刀"
    [[ $rob2_res = 2 ]] && echo  "rob2:布"
done
echo "rob1勝場:$r1_win"
echo "rob2勝場:$r2_win"
echo "平局場數:$equal"

示例4:生成1個隨機數 3以內 不包括3
---------------------------------------------------------------------
#注:生成1個隨機數 3以內 不包括3
[root@cPen_web lianxi]# echo $[RANDOM%3]
2
[root@cPen_web lianxi]# echo $[RANDOM%3]
1
[root@cPen_web lianxi]# echo $[RANDOM%3]
0

SSH 服務

三. SSH 服務介紹#

遠程 Shell 應用程序

  • 允許用戶在遠程機器上執行任意命令
  • 讓標準輸出在本地
  • 早期明文遠程協議:telnet

SSH(Secure Shell,安全的外殼)

  • 為客戶機提供安全的 Shell 環境,用於遠程管理
  • 默認端口:TCP 22

SSH 基於公鑰加密(非對稱加密)技術

  • 數據加密傳輸
  • 客戶端和服務器的身份驗證

#注:23 號端口是明文的,已經淘汰了

.--------------------------------------------------------------------------------------------------------------

ssh 是什麼?

​ ssh --> secure shell

​ remote login program -- 遠程登錄模式

​ 對數據進行加密傳輸的服務,主要用在遠程登錄

#注:把數據放到加密好了的殼裡面,是安全的協議

.--------------------------------------------------------------------------------------------------------------

ssh 協議是應用層協議,根據 ssh 協議實現的服務叫 ssh 服務

ssh 服務主要在 HP-UX,LINUX,AIX,UNIX 系統上都有(類 UNIX 系統上),Windows 上沒有

#注:ftp 協議也是應用層的協議,根據協議實現的服務叫 ftp 服務

.--------------------------------------------------------------------------------------------------------------

ssh 常見的 2 種登錄方式:

1、密碼登錄

2、密鑰登錄(免密碼登錄) # 注:不需要密碼

#注:想要登錄到那台主機,1、需要知道那台主機 ip,2、允許登錄,3、網絡跟它聯通,可以訪問到那台主機上

#注:ssh 服務默認端口 22 號端口 可以去更改

.--------------------------------------------------------------------------------------------------------------

#注:/etc/services 可以查看常用服務的默認端口號

[root@cPen_web lianxi]# less /etc/services 
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol
#注:一般來說ssh都是使用tcp去傳輸的

.--------------------------------------------------------------------------------------------------------------

#注:因為它所有的數據都是進行加密的,所以說它是安全的 shell

#注:2 台主機之間進行數據交互 都會牽扯到 數據包的傳輸

#注:對別的服務發起一個請求,其實就是相當於發送了 1 個包給它,這裡包裡面帶有請求

#注:普通情況下不給它加密的話,信息是明文的,是不安全的;ssh 服務對數據進行加密,只有 a 主機和 b 主機知道解密的方式,其他人不知道

#注:安裝好系統後(最小安裝),一般來說自帶 ssh 服務,一般來說啟動系統它會自動起來

.--------------------------------------------------------------------------------------------------------------

示例:查看ssh服務是否啟動
---------------------------------------------------------------------------------
1、查看進程
[root@cPen_web lianxi]# ps ef |grep ssh			# 注:進程名叫sshd
2、pidof sshd									# 注:判定某個服務是否存在pid
[root@cPen_web lianxi]# pidof sshd				# 注:服務起來的話必定會有1個pid
2545 2543 2542 2538 2537 2536 909
#服務起來後必定會有1個pid
3、查看網絡連接監聽狀態 netstat
#注:yum install net-tools
[root@cPen_web lianxi]# netstat -atpl |grep ssh		# 注:a 所有 ;t tcp ;p 端口
[root@cPen_web lianxi]# netstat -atpln |grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      909/sshd            
#注:listen狀態 在監聽中,表示別人可以來連接我了
tcp        0      0 192.168.0.21:22         192.168.0.42:58697      ESTABLISHED 2536/sshd: root [pr 
#注:ESTABLISHED表示已經建立連接了,可以進行數據交換了;
tcp        0     36 192.168.0.21:22         192.168.0.42:58698      ESTABLISHED 2537/sshd: root [pr 
tcp6       0      0 :::22                   :::*                    LISTEN      909/sshd       

#注:0.0.0.0:22表示在本機所有ip上監聽22端口(別人可以通過所有的ip來訪問)。如果把它監聽到192.168.0.135/24上,那別人只能通過135這個地址來訪問我
#注:listen狀態 在監聽中;表示服務起來了 在監聽狀態,表示別人可以來連接我了
#注:establish表示有1個客戶端連接我了(已經建立連接的狀態)
#注:0.0.0.0:*表示允許任意ip,任意端口客戶端來連接	(*代表任意端口客戶端)
#注:0.0.0.0:22第1種表示本機上所有的ip			(本機上的)
#注:0.0.0.0:* 表示允許任意ip,任意端口客戶端來連接	(外部客戶端的任意端口)(*代表任意端口客戶端)
------------------------------------------------------------------------------------------------------
#注:本地回環地址代表本地,測試網卡是否ok 	127.0.0.1/8 本地回環地址
#注:網卡實際地址	192.168.0.21/24
#注:別人不可以通過127.0.0.1來訪問,因為127.0.0.1代表本地,每一台機器都有一個127.0.0.1本地回環地址,別人通過127.0.0.1來訪問,僅僅只是訪問的自己

4、lsof -i:22				#注:查看有沒有listen狀態的監聽 ; establish表示連接建立了
#注:知道端口後可以查看端口
#注:lsof -->list open file 	列出打開的文件(全稱)
[root@cPen_web ~]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     908 root    4u  IPv4  27707      0t0  TCP *:ssh (LISTEN)		# 注:listen 監聽狀態
sshd     908 root    6u  IPv6  27721      0t0  TCP *:ssh (LISTEN)		# 注:ESTABLISHED 建立連接
sshd    1419 root    5u  IPv4  29943      0t0  TCP cPen_web:ssh->10.112.68.22:49959 (ESTABLISHED)
sshd    1421 root    5u  IPv4  29943      0t0  TCP cPen_web:ssh->10.112.68.22:49959 (ESTABLISHED)
============================================================================================
示例:增加ip地址
[root@cPen_web lianxi]# ip a add 192.168.0.144/24	# 注:增加ip地址
[root@cPen_web lianxi]# ip add								# 注:最好跟它同網段
    inet 127.0.0.1/8 scope host lo							# 注:dev ens3 設備 ens33
    inet 192.168.0.21/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33
    inet 192.168.0.144/24 scope global secondary ens33
============================================================================================
示例:查看命令屬於哪個包
[root@cPen_web lianxi]# which netstat				# 注:找到命令的絕對路徑
/usr/bin/netstat
[root@cPen_web lianxi]# rpm -qf /usr/bin/netstat	# 注:查看這個絕對路徑執行文件屬於哪個包
net-tools-2.0-0.51.20160912git.el8.x86_64

四。密鑰登錄#

[root@cPen_web ~]# ssh-keygen					# 注:創建密鑰對
Generating public/private rsa key pair.			# 注:rsa算法生成公鑰和私鑰的鑰匙對(鑰匙有2把不是同一把)
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JZh0IhlTUDkIvuXuv7Iw7zYsoucwfLjpPWrHYN7P63g root@cPen_web
The key's randomart image is:
+---[RSA 2048]----+
|  ..=B=..        |
| .  o+o=         |
|  . . o.. .      |
|   +     o       |
|  . .   S        |
|.o..             |
|=o*o.            |
|.=BXBE           |
|=O+*XX+.         |
+----[SHA256]-----+
[root@cPen_web ~]# 

加密

  1. 對稱加密

    ​ 加解密的鑰匙都是同一把

    ​ 怎麼樣安全的保存這個密碼,這個密鑰在需要加密的機器之間都是共享的

    ​ 很難保證這個密鑰不被洩漏

  2. 非對稱加密 # 注:加密和解密的鑰匙不一樣

    ​ 生成一對公私鑰,私鑰自己保管,公鑰可以給其他人

    ​ 公私鑰對是成對存在的,一個用於加密,一個用於解密。具體哪個為私鑰,哪個為公鑰就看使用者自己管理。

注意:

​ 使用公鑰進行加密,私鑰解密,基本用於數據加密

​ 使用私鑰加密公鑰解密,用於認證

[root@cPen_web ~]# ssh-keygen					# 注:創建密鑰對
Generating public/private rsa key pair.			# 注:rsa算法生成公鑰和私鑰的鑰匙對(鑰匙有2把不是同一把)
Enter file in which to save the key (/root/.ssh/id_rsa):  # 注:存放公私鑰的路徑,root用戶的
Enter passphrase (empty for no passphrase): 	# 注:設置密鑰密碼	# 注:非全局
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.	
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JZh0IhlTUDkIvuXuv7Iw7zYsoucwfLjpPWrHYN7P63g root@cPen_web	# 注:算法hash算法
The key's randomart image is:			# 注:信息摘要 用的 SHA256 hash算法
+---[RSA 2048]----+
|  ..=B=..        |
| .  o+o=         |
|  . . o.. .      |
|   +     o       |
|  . .   S        |
|.o..             |
|=o*o.            |
|.=BXBE           |
|=O+*XX+.         |
+----[SHA256]-----+
[root@cPen_web ~]# 
#注:hash算法  任意長度的輸入,映射成固定長度的輸出
--------------------------------------------------------------------------------------------
#注:加密分為2種方式:1、對稱加密;2、非對稱加密
#注:對稱加密 a機器給b機器傳輸東西,a機器知道1串密碼叫做aa,b機器也知道這個密碼叫做aa;a機器對date用aa加密,b機器用aa解密。2個加密解密都用同一個密鑰(加密的鑰匙A和B都知道)。形式的條件是a和b都知道密鑰是什麼,且都一樣
#注:問題 不能保證密鑰不被被人知道

#注:非對稱加密  a機器和b機器進行數據加密傳輸(進行通訊)。a機器在本地生成1個public和private的鑰匙對,a機器生成公鑰和私鑰都放在a機器上,發送數據時,a機器先把公鑰給b(也可以把公鑰給c,公鑰可以給任何人),但是私鑰只有自己a機器才知道。b機器用a機器給的公鑰加密,a機器收到後用私鑰解密
唯一能夠解密的鑰匙 私鑰 只有機器a才有,只有機器a才能解密

#注:對於數據信息加密而言,用公鑰加密,用私鑰解密,只有機器a才能解密
#注:非對稱加密  用於數據加密時,用公鑰加密,私鑰解密

五. ssh 配置#

ssh 配置

目錄:/etc/ssh # 注:這下面放的都是 ssh 的配置文件

[root@cPen_web ~]# cd /etc/ssh/  
[root@cPen_web ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key
#注:sshd_config 客戶端的配置文件
#注:ssh_config  服務的配置文件
#注:ssh_host_ecdsa_key  ssh_host_ecdsa_key.pub  一對公私鑰
#注:ssh_host_ecdsa_key.pub 公鑰  ssh_host_ecdsa_key私鑰
#注:ssh服務起來的時候,它會自動創建1對公私鑰
示例:創建的公私鑰默認放在/root/.ssh/目錄下
[root@cPen_web ~]# cd .ssh
[root@cPen_web .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
#注:id_rsa		私鑰
#注:id_rsa.pub	公鑰

六。實現公鑰認證 (免密碼登錄)#

#注:a機器下(生成公鑰後)
[root@cPen_web ~]# cd .ssh
[root@cPen_web .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@cPen_web .ssh]# cat id_rsa.pub 
ssh-rsa
AAAAB3NhQX......jXDv87iERv/z9XepKCeYqCfF2Dvv0n/g+IeFmzhW0iOppExskimMPGGWcN+7rXWlwaLNTiknmSTl+mFvZV8uIY5DnQXv root@cPen_web
#注:b機器下
[root@cPen_web ~]# mkdir .ssh					# 注:沒有的話 創建 .ssh文件夾
[root@cPen_web ~]# cd .ssh/
[root@cPen_web .ssh]# ls
known_hosts
[root@cPen_web .ssh]# vim authorized_keys		# 注:創建文件authorized_keys
ssh-rsa											# 注:把a機器的公鑰粘過去
AAAAB3NhQX......jXDv87iERv/z9XepKCeYqCfF2Dvv0n/g+IeFmzhW0iOppExskimMPGGWcN+7rXWlwaLNTiknmSTl+mFvZV8uIY5DnQXv root@cPen_web
[root@cPen_web .ssh]# chmod 600 authorized_keys 	
#注:給它的權限為600,不要讓其他人或者其他組有任何權限
#注:a機器下
[root@cPen_web .ssh]# ssh root@10.122.148.108		# 注:使用客戶端 以root用戶登錄
………………………
Are you sure you want to continue connecting (yes/no)? yes
………………………
[root@cPen_web ~]# 									# 注:不需要輸入密碼,就是免密碼登錄成功

實現公鑰認證,免密碼登錄

A --> B A 機器要登錄到 B 機器上

1、在 A 機器上生成公鑰對(如果有公鑰對,則不需要重新生成),默認會放在當前用戶家目錄下的.ssh/ 文件下

生成一個 id_rsa(私鑰),id_rsa.pub(公鑰)

#注:如果有了,就不需要重新生成公鑰對了,因為會覆蓋。默認路徑不要改它,改它的意義不大,因為默認在默認路徑查找

[root@cPen_web ~]# ssh-keygen # 注:生成,中間一直敲回車,選擇默認

2、在 B 機器上目標用戶的家目錄下面~/.ssh/authorized_keys 文件裡將 A 機器的公鑰複製粘貼過來,

沒有此文件就創建,並且確保這個文件的權限設為 600

3、查看公鑰認證是否成功

​ 在 A 機器上執行 ssh root@B 機器的 ip

​ 不需要輸入密碼就可以登錄到 B 機器,則表示免密碼登錄成功

​ 公鑰放在 B 機器的哪個用戶下面,就通過哪個用戶登錄

​ 以哪個用戶登錄,需要看公鑰放到 B 機器的哪個用戶下

[root@cPen_web ~]# useradd wy
[root@cPen_web ~]# su - wy					# 注:su切換不會經過ssh服務
[wy@cPen_web ~]# 

#注:su切換用戶,是不會經過ssh
#注:ssh是遠程登錄
su su -		su切換不會切換bash環境(還是原用戶的bash環境)
				 su - 去切換 會切換到wy的bash環境

公鑰認證排錯

  1. 確保公鑰正確

  2. 確保~/.ssh/authorized_keys 文件權限為 600

  3. 確保家目錄以及.ssh 目錄權限為 755 以下權限,即屬組和其他人沒有 7 的權限


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。