前言:
整理下很久之前做異地備份、數據同步都有使用到的ssh免密碼通過密鑰登陸的步驟。
出於安全考慮,需要對ssh服務做下簡單配置
說明:
服務端:既服務器(或異地保存數據的目的機),或理解爲IP通信中的目的地址
客戶端:既工作站,個人電腦(或數據源服務器),或理解爲IP通信中的源地址
思路:
要做的有幾個地方:
默認服務端口修改(可以避免部分針對22端口的暴力破解或掃描)
ssh版本協議(這個現在基本默認就是版本2)
禁止root賬戶ssh登陸
自定義登陸消息(可以給非本人的登陸行爲一個友好提醒)
只允許指定ip登入
iptables 規則修改
重啓服務,驗證修改是否生效
正文:
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
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)都爲用戶本身 。如果這兩個權限有一個不正確,雖設置了密鑰登陸,但還是會提示輸入密碼的
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
找到如下一行,按相同格式增加一行
最後去掉寫權限
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目錄及文件權限