使用SSH
鏈接服務器是一件很日常的事,可是,鏈接是否足夠安全是一個使人擔心的問題。本文從以下幾個方面介紹瞭如何創建一個足夠安全的SSH
鏈接:python
ssh-agent
第一步就是修改默認端口22
,修改/etc/ssh/sshd_config
中的Port
便可,好比這裏修改成1234
端口:算法
Port 1234
注意這裏須要配合SELinu
添加端口,不然不能啓動sshd
服務,在CentOS8
中能夠經過semanage
添加端口,首先查看是否安裝policycoreutils-python-utils
:ubuntu
rpm -qa | grep policycoreutils-python-utils
若是沒有安裝就使用yum
安裝:安全
sudo yum install policycoreutils-python-utils
接着添加ssh
端口:bash
sudo semanage port -m -t ssh_port_t -p tcp 1234
查看是否添加成功:服務器
sudo semanage port -l | grep ssh
SSH
協議SSH2
協議要比SSH1
安全,所以建議使用,一樣修改配置文件:ssh
Protocol 2 # 若是沒有就末尾添加
注意服務器添加Protocol 2
後,客戶端也須要在/etc/ssh/sshd_config
中添加Protocol 2
。tcp
修改成60s
未操做自動斷開:函數
ClientAliveInterval 60 # 以秒爲單位,超過60s未操做自動斷開 ClientAliveCountMax 0 # 若是客戶端沒有響應則判斷一次超時,該參數設置容許超時的次數
Root
用戶登陸PermitRootLogin no
AllowUsers testuser
這樣只能經過ssh testuser@ip
鏈接到該服務器。加密
另外還能夠爲用戶添加指定ip
,好比筆者的本機內網ip
爲192.168.1.7
,修改成:
AllowUser testuser@192.168.1.7
這樣其餘ip
就不能登陸了。
DenyUser testuser
禁止經過testuser
登陸。
相似的配置還有AllowGroups
與DenyGroups
。
PermitEmptyPasswords no PasswordAuthentication no
MaxAuthTries 6
默認爲最多容許3
次密碼錯誤(須要除2),修改成2
則表示若是密碼輸入錯誤一次即自動斷開。
LogLevel VERBOSE
默認爲INFO
,修改成VERBOSE
能夠獲得更加詳細的信息。
上面已經設置了不能使用密碼登陸,那麼,換句話說須要使用密鑰登陸,生成密鑰並不難:
ssh-keygen -t rsa
只須要指定算法便可,默認爲3072
位,可選4096
位。
可是,相比起傳統的RSA
,在OpenSSH 6.5
中引入了另外一種叫Ed25519
的更加安全的算法,使用橢圓曲線進行加密。Ed25519
相比起RSA
的優勢有:
RSA 3072
的544
個字符,Ed25519
只有68
個字符RSA
快,同時簽名速度也比RSA
快生成方式很簡單:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/ed25519
參數說明以下:
-a
:指定KDF
(Key Derivation Function
)的輪數-t
:指定算法,可選dsa
、ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
、rsa
-f
:指定位置生成以後複製公鑰便可:
ssh-copy-id user@ip -i ~/.ssh/ed25519.pub
好比按上述方式生成密鑰對時,會提示輸入私鑰密碼:
這裏的密碼會在使用私鑰鏈接的時候提示:
假設您有多臺服務器:server1
,server2
,server3
,則能夠爲不一樣服務器使用不一樣的密鑰對,而不是使用同一個密鑰對:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server1 ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server2 ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server3
接着複製公鑰到對應的服務器上:
ssh-copy-id user@server1 -i ~/.ssh/server1.pub ssh-copy-id user@server2 -i ~/.ssh/server2.pub ssh-copy-id user@server3 -i ~/.ssh/server3.pub
ssh-agent
ssh-agent
是一個程序,能夠幫助管理私鑰。代理能提供以下用途:
使用不一樣密鑰對
的例子中,鏈接到不一樣服務器時須要加上-i
參數),ssh-agent
能夠自動選擇,不須要手動指定私鑰密碼
例子),可是又須要頻繁地使用私鑰進行認證時,ssh-agent
能夠幫助自動輸入私鑰的密碼首先啓動:
eval `ssh-agent` # 注意是反引號
接着添加私鑰:
# 以上面「使用不一樣的密鑰對」爲例 ssh-add ~/.ssh/server1 ssh-add ~/.ssh/server1 ssh-add ~/.ssh/server1
這樣鏈接的時候就不須要手動指定-i
參數了。
若是私鑰指定了密碼,會在ssh-add
時進行提示輸入:
這樣下次使用帶密鑰的私鑰鏈接時就不須要輸入密碼了。
2FA
Two-Factor Authentication
,縮寫2FA
,意爲雙重認證
,雙因子認證
等等,顧名思義就是進行兩步認證的操做,可選的應用有:
Google Authenticator
Authy
Yubico
Duo
好比Google Authenticator
,安裝以後,鏈接服務器須要進行輸入驗證碼的操做。
具體的話就不演示了,由於筆者須要常常鏈接,所以這個選項對筆者來講不太實際,想要實現的話具體能夠參考這裏。