infrastructure / 2021/1/11
Linux實作筆記01:WSL啟用SSH終端機連線
在 Windows WSL Ubuntu 啟用 SSH、排查 sshd 與主機金鑰問題的實作紀錄。
接觸了各種資料,開發的平台/機器不是用 Unix 基底的 Mac,就是 Linux 家族的 CentOS 或 Ubuntu。國中時期為了玩遊戲在 DOS 系統下學了不少指令,命令列介面對我而言有種莫名的親切感,總覺得學會了有天會用得上,就當作充實自己的實力吧!
這個時代遠端桌面操作跟喝水一樣簡單,Linux 應該也是吧?一邊這麼想著一邊研究著怎麼遠端連線到 Linux,我才知道我太天真了……
據資料了解,Linux 可透過終端機連線,為了開啟 SSH(Secure Shell),一連串的問題就這樣開始了。
系統:Windows 子系統 WSL 的 Ubuntu 18.04
連線除錯方式
參數加上 -v 可以看詳細資訊:
ssh -v localhost
折騰半天,總結是兩個問題:
- ssh 有沒有啟用
- 公鑰跟私鑰有沒有產生
1. ssh 有沒有啟用
如果想確認 ssh 有沒有安裝,可以用下面指令確認:
which ssh # 用戶端
which sshd # 伺服端
因為用的是 WSL 的 Ubuntu 練習,啟用與檢查指令為:
service ssh start
service ssh status
如果出現 sshd is not running,就重新啟動。
啟動時的錯誤訊息
/etc/ssh/sshd_config line 56: Bad yes/no argument: Yes
表示 sshd_config 的設定有錯,yes/no 的參數全部要小寫。
2. 公鑰跟私鑰有沒有產生
啟動 ssh 的時候若出現:
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
用 ll /etc/ssh 確認 ssh_host_ecdsa_key、ssh_host_ed25519_key、ssh_host_rsa_key 及各自的 .pub 檔案是否存在。若不存在:
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
之後應該就可以正常連線了。
用錯誤訊息搜尋到的答案並不一定有效,以下列出 client 端連線時遇到的訊息供參考:
Connection closed by 127.0.0.1 port 22
ssh: connect to host localhost port 22: Connection refused
kex_exchange_identification: read: Connection reset by peer
圖片來源:linux_inside(CC BY-SA 2.0),Adriano Gasparri。