ssh 配置 及免密碼 密鑰登陸

    前言:

    整理下很久之前做異地備份、數據同步都有使用到的ssh免密碼通過密鑰登陸的步驟。

    出於安全考慮,需要對ssh服務做下簡單配置


說明:

    服務端:既服務器(或異地保存數據的目的機),或理解爲IP通信中的目的地址

    客戶端:既工作站,個人電腦(或數據源服務器),或理解爲IP通信中的源地址


思路:

    要做的有幾個地方:

  1. 默認服務端口修改(可以避免部分針對22端口的暴力破解或掃描)

  2. ssh版本協議(這個現在基本默認就是版本2)

  3. 禁止root賬戶ssh登陸

  4. 自定義登陸消息(可以給非本人的登陸行爲一個友好提醒)

  5. 只允許指定ip登入

  6. 密鑰認證登陸

  7. 普通賬戶的sudo權限

  8. iptables 規則修改

  9. 重啓服務,驗證修改是否生效


正文:

    1.ssh服務配置(主要配置服務端,如是雙向登陸則都需要配置)

    linux ssh服務的配置文件爲/etc/ssh/sshd_config,對此文件修改以下幾個地方,本文給出修改後的參數及說明

Port 2020                                                #修改ssh服務端口爲2020
Protocol 2                                                #只允許SSH2協議鏈接
ServerKeyBits 1024                                #serverkey強度爲1024
PermitRootLogin no                                #禁止root賬戶ssh登陸
PermitEmptyPasswords no                    #禁止空密碼登陸
PasswordAuthentication no                   #禁止密碼方式登陸
Banner /etc/ssh/ssh_banner.txt            #自定義登陸前歡迎語的具體文件(文件內容爲登陸前歡迎消息)

以上某些參數在大部分系統中已默認爲以上值,如serverkeybit

wKiom1YbaXzgMiw6AADdKeS5D_4536.jpg

    2.自定義登陸提示信息

    賬戶登陸前的提示信息設置已經在上面做了設置,接下來做下賬戶登陸成功後的提示信息,將提示內容寫入如下文件即可

    /etc/motd

    3.只允許指定IP登陸

    配置這個一般都是在你有固定公網IP的情況下才做的,或者你有一個可以連接到服務器內網的***,否則不要輕易設置這個,設置後很可能會無法登陸

    這裏我們使用hosts.allow和hosts.deny兩個文件進行控制,這兩個文件爲TCP wrappers規則文件既ACL,有興趣的朋友可自行了解下

    簡單說下安全規則,ssh登陸時,主機會先檢測hosts.deny文件中是否有拒絕列表,然後在檢測hosts.allow中是否有允許列表。有關ACL訪問控制列表的詳情,請自行了解。

    這裏有兩種用法,一種是將已確認的危險IP加入到hosts.deny文件中,另一種是直接帶hosts.deny文件中拒絕所有,然後將允許的IP加入到hosts.allow中,這裏我們採用後一種方式

    編輯hosts.deny hosts.allow文件,在最後一行加入 如下內容,格式爲[,]逗號是分割多個ip,而[:]冒號是分割它的處理,處理方式只能爲allow或deny,分割方式可省略

vim /etc/hosts.deny
sshd:All                                #下載deny文件中就是默認拒絕所有
vim /etc/hosts.allow
sshd:118.144.133.66        #允許指定單一IP地址
sshd:192.168.1.2/24         #允許指定單一IP地址
sshd:192.168.2.                  #允許指定IP地址段


    4.密鑰認證

    這個密鑰是要在客戶端,既個人電腦工作站上生成,密鑰分爲私鑰與公鑰,私鑰是保存在自己客戶端上的,而公鑰是發送給服務端保存在服務端上的

    生成密鑰,密鑰分爲rsa與dsa,在算法上有所區別,具體有待理解。

    執行以下命令,一路回車,切記不要輸入密碼,不然就達不到免密碼登陸的效果了,當然如果是使用密鑰驗證的登陸方式,可以設置密碼,這樣在登陸時除了需要密鑰,還需要正確密碼纔可登陸成功

ssh-keygen -t rsa

    將生成的id_rsa.pub公鑰文件傳送到服務端,另存爲authorized_keys,並賦予755權限,切記,此文件一定要保存到登陸用戶的~/.ssh目錄下。如我是以om用戶登陸,我保存的文件就是/home/om/.ssh/authorized_keys。

    如服務端已有此文件,則注意文件內容是否爲自方人員公鑰信息,若是則將自己的公鑰追加到文件內,可使用以下命令。若不是自方人員信息,就要排查服務器了

cat id_rsa.pub >> /home/om/.ssh/authorized_keys

    注:最後要確認.ssh目錄的權限爲700;authorized_keys的權限爲600,同時.ssh目錄和authorized_keys的屬主(own) 屬組(group)都爲用戶本身 。如果這兩個權限有一個不正確,雖設置了密鑰登陸,但還是會提示輸入密碼的

wKiom1YdzS6xS-L-AADEpGVY7Y4898.jpg

ll -ldZ

drwx------. root root unconfined_u:object_r:ssh_home_t:s0 .ssh/

    5.爲普通用戶賦予sudo權限

    控制sudo權限的文件爲/etc/sudoers,默認爲只讀文件,即使是root賬號

    首先修改sudoers用戶權限,使root賬號擁有寫權限

chmod u+w /etc/sudoers

    找到如下一行,按相同格式增加一行

wKioL1Ybczuh5cr3AAA3zmapvtw264.jpg

    最後去掉寫權限

chmod u-w /etc/sudoers

    這裏使用了簡單粗暴的配置方式,有關sudoers文件的詳細說明,帶我研究後再寫篇^_^

    6.增加iptables規則

    將修改後的ssh端口號加入到iptables內,以防止因iptables爲允許端口通信導致的無法鏈接

    7.重啓服務

    重啓ssh及iptables服務

service sshd restart
service iptables restart

    每次修改ssh配置文件,都需要重啓服務纔會生效

    8.驗證

    不要急着退出當前登陸窗口,重新開啓一個命令行窗口,進行登陸測試,因爲如果登陸失敗,還有修改的機會,若要已經退出原有登陸窗口,那就悲劇了……



2015-10-14:增加ssh密鑰登陸時需注意權限

2016-11-29:注意.ssh 目錄的安全標籤,若.ssh目錄不是通過ssh-keygen創建的,那目錄安全標籤就應該不是ssh_home_t:s0 值,這時若SElinux 爲啓用狀態,即使公鑰登錄配置的正確,仍會提示輸入密碼認證

恢復目錄安全標籤

restorecon -r -vv .ssh

2018-04-17:更正ssh目錄及文件權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章