VirtualBox Ubuntu ssh 密鑰登錄

VirtualBox Ubuntu ssh 密鑰登錄

我之前進行嵌入式開發(fā)時,利用 VirtualBox Ubuntu 搭建過開發(fā)環(huán)境,但是在虛擬機里面閱讀代碼和寫代碼的體驗都不好,總是會有一種延遲的感覺。

于是我嘗試了使用 Ubuntu 橋接網(wǎng)絡(luò),ssh 密碼登錄的方式登錄虛擬機進行開發(fā),但這種開發(fā)方式也有兩個問題:

  1. 由于是橋接網(wǎng)絡(luò),Ubuntu 與物理機是在同一個局域網(wǎng),也就是說物理機如果處于不同的路由器下(比如公司和家里),它所屬的局域網(wǎng)也不一樣,因此 Ubuntu 利用 DHCP 會自動獲得一個新的 IP 地址,這就導(dǎo)致需要手動輸入 Ubuntu 的 IP 地址才能連上。在此應(yīng)用場景下將 Ubuntu 的 IP 地址設(shè)置為靜態(tài)地址也沒用。
  2. 每次登錄都需要輸入密碼,重新連接時也需要輸入密碼,尤其是利用 VSCode 連接 Ubuntu,一段時間沒有操作后,就需要你輸入密碼重新登錄,十分繁瑣。這里還不需要考慮密碼登錄的安全性問題,光是這些麻煩在實際應(yīng)用中就很頭痛了。

下面我介紹一種 Ubuntu 采用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)上網(wǎng),同時在 VirtualBox 配置主機和 Ubuntu 的端口轉(zhuǎn)發(fā)規(guī)則,利用 ssh 密鑰方式登錄虛擬機。這能夠完美解決上述的兩個問題,算是對工具使用方式的改進吧,

VirtualBox NAT 設(shè)置

新添加一個網(wǎng)卡 2,“連接方式”設(shè)置為“網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)”,然后點擊“端口轉(zhuǎn)發(fā)”。

image

點擊右上角的 "+" ,創(chuàng)建一條新的端口轉(zhuǎn)發(fā)規(guī)則,協(xié)議使用 TCP,子系統(tǒng)端口選擇 22(ssh 登錄的默認端口),主機端口需要選擇一個未被使用的端口,我這里選擇 1111 。點擊 OK,就可以啟動 Ubuntu 了。

image

關(guān)于如何在 Win10 查找某一端口是否被占用,可以參考博客win10端口被占用如何查看。在命令行界面輸入 netstat -ano 查看所有被占用的端口,netstat -aon | findstr "8080" 查找某一端口是否被占用。

C:\Users\M2019>netstat -aon | findstr "1111"
  TCP    0.0.0.0:1111           0.0.0.0:0              LISTENING       25840

Ubuntu ssh 配置

輸入 sudo vim /etc/ssh/sshd_config 編輯 ssh 的配置文件。

需要配置如下信息:

  • 取消 Port 22 的注釋。
  • 取消 PubkeyAuthentication yes 的注釋,并確保公鑰認證后面為 yes。
  • 取消 AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 的注釋。
  • 取消 PasswordAuthentication no 的注釋,并確保密碼認證后面為 no 。

保持退出編輯后,輸入 sudo /etc/init.d/ssh restart 重啟 ssh 服務(wù)。

ssh 密鑰生成并上傳

Win10 生成 ssh 密鑰可參考博客:Windows下生成SSH密鑰 。

利用 ssh-keygen 生成密鑰對(公鑰、私鑰)。我這里生成的私鑰名稱為 virtualbox_id_rsa,公鑰名稱為 virtualbox_id_rsa.pub 。

然后就需要上傳公鑰到服務(wù)器了,這樣我們就可以使用私鑰去連接服務(wù)器。

在 Ubuntu 服務(wù)器里,輸入

jackis@jackis-VirtualBox:~$ cd .ssh/
jackis@jackis-VirtualBox:~/.ssh$ vim virtualbox_id_rsa.pub

將之前生成的公鑰(virtualbox_id_rsa.pub)里的內(nèi)容復(fù)制到服務(wù)器里,保存并退出編輯。

輸入下述命令將該公鑰加入 ssh 的認證密鑰。

jackis@jackis-VirtualBox:~/.ssh$ cat virtualbox_id_rsa.pub >> authorized_keys

如此便完成了公鑰的安裝。為了確保連接成功,請保證以下文件權(quán)限正確:

jackis@jackis-VirtualBox:~/.ssh$ chmod 600 authorized_keys
jackis@jackis-VirtualBox:~/.ssh$ chmod 700 ~/.ssh

然后輸入 sudo /etc/init.d/ssh restart 重啟 ssh 服務(wù)。

私鑰登錄服務(wù)器

這是 Ubuntu 服務(wù)器端的 ssh 已經(jīng)配置好了,我們就可以利用私鑰去登錄 Ubuntu 了,此處記錄 XShell 和 VSCode 兩種登錄方式。

XShell

新建一個會話,在左側(cè)“連接”選項欄里,“名稱”可以隨意更改,我這里為虛擬機,“主機”里的內(nèi)容為 127.0.0.1,“端口號”為前面 VirtualBox 設(shè)置的端口轉(zhuǎn)發(fā)規(guī)則的端口號,我這里為 1111 。

image

點擊左側(cè)的“用戶身份驗證”,“方法”選擇 Public Key ,然后點擊“用戶密鑰”右側(cè)的“瀏覽”。

image

然后點擊“導(dǎo)入”,將之前生成的私鑰文件導(dǎo)入,導(dǎo)入成功就能夠在左側(cè)看到私鑰了。點擊“確定”。

image

在“用戶密鑰”這里選擇剛才導(dǎo)入的私鑰文件,“用戶名”這里輸入登錄的用戶賬戶,點擊確定。

image-20210321112610597

此時就能夠正常通過私鑰連接服務(wù)器了。

VSCode

我這里使用 VSCode 的 Remote - SSH 插件連接虛擬機,需要配置一些內(nèi)容。

打開 VSCode Remote - SSH 插件配置文件,默認在 C:/Users/<username>/.ssh/config 。

添加下述內(nèi)容:

Host 虛擬機
  HostName 127.0.0.1
  Port 1111
  User jackis
  IdentityFile C:/Users/M2019/.ssh/virtualbox_id_rsa
  • Host 是主機在插件處顯示的名稱。
  • HostName 是主機的 IP 地址。
  • Port 是主機的端口。
  • User 是登錄賬戶。
  • IdentityFile 是你的私鑰的完整路徑名。

配置完成后,即可正常連接虛擬機了。


如果配置過程中出現(xiàn)了錯誤,歡迎在下方留言一起交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容