OpenSSH
OpenSSH 是 SSH (Secure SHell) 協議的免費開源實現。SSH協議族可以用來進行遠程控制, 或在計算機之間傳送文件。而實現此功能的傳統方式,如telnet(終端仿真協議)、 rcp ftp、 rlogin、rsh都是極爲不安全的,並且會使用明文傳送密碼。OpenSSH提供了服務端後臺程序和客戶端工具,用來加密遠程控制和文件傳輸過程中的數據,並由此來代替原來的類似服務。
OpenSSH是使用SSH透過計算機網絡加密通訊的實現。它是取代由SSH Communications Security所提供的商用版本的開放源代碼方案。目前OpenSSH是OpenBSD的子計劃。
OpenSSH常常被誤認以爲與OpenSSL有關聯,但實際上這兩個計劃的有不同的目的,不同的發展團隊,名稱相近只是因爲兩者有同樣的軟件發展目標──提供開放源代碼的加密通訊軟件。
OpenSSH服務,sshd,是一個典型的獨立守護進程(standalone daemon),但也可以根據需要通過網絡守護進程。
- 安裝 openssh
- 使用 ssh 用戶名+密碼 方式登錄
- openssh的主配置文件爲 /etc/ssh/ 目錄下的 ssh_config 和 sshd_config
- ssh_config和sshd_config都是ssh服務器的配置文件,二者區別在於,前者是針對客戶端的配置文件,後者則是針對服務端的配置文件。
-
這裏只配置 sshd_config
-
vim /etc/ssh/sshd_config #需要root權限
-
修改以下幾項
- Port 22 #sshd服務運行端口,默認爲22
SyslogFacility AUTHPRIV #定義ssh的日誌記錄在 /var/log/secure 文件中
PermitRootLogin yes #允許 root 用戶網絡登錄
PermitEmptyPasswords no #是否允許空密碼登錄,設置爲no 不允許
PasswordAuthentication yes #是否允許使用密碼登錄,設置爲允許
UsePAM no #是否使用PAM驗證
UseDNS no #是否允許DNS查詢,選擇 no 關閉
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server - 確認無誤後保存退出,重啓ssh服務
- 在另外一臺機器上登錄
- ssh 用戶名@IP 登錄的用戶要事先存在於要登錄的機器上,並設置有密碼。
- 按提示輸入密碼
-
在生產環境中,如果讓root用戶直接可以使用網絡登錄是非常危險的,所以下面制定更高安全級別的登陸方式:密鑰登錄
-
使用 ssh-keygen 命令來生成密鑰對
-
使用需要登錄的用戶生成密鑰對
- Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): #默認存放密鑰的目錄及密鑰名稱 id_rsa (默認基於rsa算法)
Enter passphrase (empty for no passphrase): #是否給密鑰設置密碼
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa. #生成密鑰對的存放目錄及名稱
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:q12boL6CTiU1DSBRt6/rPpwoIi/8mVI1Aq5POWbUUIU [email protected]
The key's randomart image is: #rsa 2048 爲密鑰的長度
+---[RSA 2048]----+
|oooo+o. |
| o..E+ |
|. .o+ . |
| ..o.= |
|....+ o S |
|. *+ . . |
|.=o=.. o . |
|=++ B. + o o |
|o==*++=.. o |
+----[SHA256]-----+ - 私密鑰文件 id_rsa 一定要保存好,不能泄漏
- 將公密鑰文件 id_rsa.pub 的內容寫入本地 authorized_keys 私鑰驗證文件中
- 在使用密碼驗證方式登錄的情況下,可以使用 ssh-copy-id 將公鑰複製到遠程機器
- ssh-copy-id -i .ssh/id_rsa.pub 用戶名@對方IP
- 注意: ssh-copy-id 將key寫到遠程機器的 ~/ .ssh/authorized_key.文件中
-
注意 .ssh 目錄和 authorized_keys 文件的權限
-
.ssh 目錄權限必須爲 700 authorized_keys 文件權限必須爲 644
- chmod 700 ~/.ssh
- chmod 644 ~/.ssh/authorized_keys
- Permission denied (publickey,keyboard-interactive).權限被拒絕(公鑰、鍵盤交互) 一般這個報錯就是文件權限引起的
-
編輯 /etc/ssh/sshd_config 配置文件
- Port 22
SyslogFacility AUTHPRIV
PermitRootLogin no #禁止root用戶網絡登錄
PubkeyAuthentication yes #開啓密鑰認證
AuthorizedKeysFile .ssh/authorized_keys #指明密鑰認證文件存放位置及名稱,這裏使用的是相對路徑
PermitEmptyPasswords no #不允許空密碼登錄
PasswordAuthentication no #不允許密碼方式登錄
UsePAM no
UseDNS no
-
重啓服務之前,建議多開一個 ssh 鏈接,萬一配置有問題方便處理
-
確認無誤保存退出,重啓sshd服務
-
systemctl restart sshd
- 登錄測試
- 切換爲生成 ssh-keygen 的用戶
- ssh [email protected]
-
將公密鑰 id_rsa.pub 文件中的 key 複製到其他機器上的 authorized_keys 密鑰驗證文件中
-
注意 :id_rsz.pub 文件中的 Key 爲一行,沒有換行
-
單方通信只需要對方機器的 id_rsz.pub 文件中的 Key
- A 機器上的 authorized_keys 密鑰認證文件中有 B 機器密鑰key的信息,所以在 B 機器上可以登陸 A 機器
- 反之在 B 機器上的 authorized_keys 密鑰認證文件中沒有 A 機器的key,所以在 A 機器上無法登陸 B 機器
-
雙方通信 authorized_keys 文件中要有雙方機器 id_rsz.pub 文件中的 Key
- 在另外一臺機器上測試
- 配置好使用密鑰認證登錄後,在 WINDOWS 上使用 Xshell 密鑰認證方式登錄 Linux
- 打開 Xshell 點擊 工具--新建用戶密鑰生成嚮導
- 默認密鑰類型 rsa ,密鑰長度 2048位
- rz 命令屬於 lrzsz 包
- 在 Linux 機器上使用哪個用戶登陸,就在對應用戶家目錄下的 authorized_keys 文件中添加密鑰認證 key
- 在 Linux 機器上使用哪個用戶登陸就在對應用戶家目錄下的 authorized_keys 文件中添加密鑰認證 key
- 填寫對應的用戶名
- 填寫用戶 key 文件的加密密碼