這是一張有關標題為 使用 SSH 金鑰進行無密碼遠端連線 的圖片

使用 SSH 金鑰進行無密碼遠端連線

建立安全、快速可靠的連線

引言

Secure Shell(SSH)是一個安全協定,允許兩台電腦通過安全的連接進行數據交換(執行命令、傳檔案),並提供加密保證數據的安全與完整性。

SSH 通常用於兩台電腦的遠端登錄。它取代了舊的遠端訪問協定,像是 Telnet 是以明文沒有加密的方式傳輸密碼和內容。而 PTT 也在 2020 年關閉不安全的 Telnet 協定,改用 SSH 或是 WebSocket 協定,以確保通訊過程都有加密,防止竊聽與竄改,提高安全性和隱私性。

SSH 除了裝置遠端連線,還可以:

  • 建立 SSH 隧道(Tunneling)進行端口轉發,安全的的訪問網路資源。
  • SFTP、SCP 提供安全檔案傳輸進行上傳或下載檔案。
  • rsync 用於檔案同步,減少傳輸用量。
  • 其他應用…

預設 Linux、MacOS 或是 Windows 預設都整合了 OpenSSH 套件。OpenSSH 是一個開源的 SSH 實作,讓使用者可以透過 SSH 協定所實作的套件,裡面包含了:

  • 遠端操作工具

    • ssh,用於遠程登入到其他主機並執行命令。
    • scp,本地與遠端的檔案傳輸。
    • sftp,類似 FTP 的使用方式,但傳輸都有進行加密。
  • 金鑰管理工具

    • ssh-add,將私鑰加入 SSH 代理程式,以便在不需要再次輸入密碼的情況下使用私鑰進行身份驗證。
    • ssh-keysign,用於對 SSH 證書進行簽名以進行身份驗證。
    • ssh-keyscan,用於掃描遠端主機以檢索其 SSH 公鑰。
    • ssh-keygen,用於生成 SSH 金鑰對(公鑰和私鑰)。
  • 伺服器端

    • sshd (SSH Daemon),在伺服器上運行的守護程序,負責接受來自客戶端的 SSH 連線請求。
    • sftp-server,處理 sftp 客戶端的請求並進行檔案傳輸。
    • ssh-agent,管理用戶的 SSH 金鑰,並在需要時提供這些金鑰進行身份驗證。

本文章重點會著重在如何建立公鑰與私鑰,並透過這兩把鑰匙實現無密碼認證。另外也會提及伺服器端如何運行 SSH 服務,並讓用戶端透過 SSH 進行連線。

在傳統上密碼登入方式,輸入正確的使用者密碼以進行身分驗證。若伺服器暴露在公共網路上時,可能會面臨暴力破解的風險,進而導致伺服器資料外洩。

為了提升安全性(與懶得輸入密碼?),可以透過公私鑰進行驗證。如此一來不需要輸入密碼就可以連線,且駭客在沒有私鑰的情況下也無法登入。

💡 本文章有使用 Tailscale 建立內網,達成本地端與伺服器端的電腦透過 hostname 或是 IP 進行連線。

兩台電腦要連線需要有 IP,如果是公網 IP 則需要設定路由器進行端口轉發到內網,但相對暴露 SSH 端口危險的。 不想暴露端口、沒有公網 IP 或是無法修改路由器設定等,可閱讀使用 Tailscale 輕鬆建立安全且私密的通道來實現兩台電腦的連線。

SSH 重點摘要

  1. SSH 主要兩種驗證方式為:

    • 密碼身分認證(Password-based authentication)
    • 公鑰認證(Public-key authentication)
  2. 實現 SSH 金鑰後,登入方式可使用金鑰登入,不需要輸入密碼。

  3. 公開金鑰 內容會填寫在 遠端伺服器 上的 authorized_keys。

  4. 私密金鑰 會保留在您的本機系統上,保護此私密金鑰,不要共用它。

  5. 公開金鑰可以與任何人共用,私密金鑰只有自己有存取權限

  6. SSH 可以選擇不同加密演算法,RSA 為預設、目前廣泛且相容性最好的加密方法,相反,ED25519 對比於 RSA 具有更好的性能但較差的相容性,目前絕大多數伺服器都逐漸支援。為我個人目前產金鑰的首選。在此確保本地端與伺服器可以正常通訊即可。

  7. 絕大多數存取 GIT 的傳輸協定是 SSH。意味著在遠端操作像是 clone, push, pull 都會要求認證。

SSH 加密方式,雖然 RSA 比 Ed25519 相容性好,但實際在使用上建議以產生 Ed25519 為優先以確保安全性與速度。

SSH 金鑰建立與連線流程

假設 nodeA 為本地端(使用者),nodeB 為伺服器端。

nodeA 為工作的電腦,像是要進行 git clone,或是進行 SSH 連線到別的電腦上。

nodeB 為被連線的電腦,像是 git 伺服器,網頁伺服器、代理伺服器、虛擬專用伺服器等…

  1. 在 nodeA 或 nodeB 產生金鑰(公鑰與私鑰)。
  2. 把私鑰放在 nodeA,公鑰放在 nodeB。
  3. nodeB 建立 ~/.ssh/authorized_keys,並填入公鑰。
  4. nodeA 建立 ~/.ssh/config,填入連線資訊,連線資訊包含伺服器 IP 與私鑰路徑。
  5. nodeA 在進行 SSH 連線時,預設會使用金鑰進行連線。

💡要特別注意的是:

  1. 確定私鑰只有自己有存取權限,且 nodeB 沒有私鑰。
  2. nodeB 如果是 Windows 且為系統管理員。路徑需改為: C:\ProgramData\ssh\administrators_authorized_keys
  3. 如果連線失敗或設定金鑰後但卻要求輸入密碼,可在 SSH 連線時可以加上 -vvvv 進行除錯。

確認 SSH 環境

Linux 與 Windows 預設已經安裝好客戶端,輸入 ssh USER@IP 便可以連線到其他伺服器。

若想要建立 SSH 伺服器,則需要另外安裝,並運行 SSH 服務。

Linux

1
2
3
4
5
# 預設已安裝好 openssh-client,可以直接先檢查版本
ssh -V

# 如果找不到指令表示尚未安裝,可透過以下指令安裝 openssh-client
# sudo apt install openssh-client

可以看到 Linux 目前裝的版本為 OpenSSL 3.0.2。

1
2
wells@server:~$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 Mar 2022

若要讓其他電腦能透過 SSH 連到這台 Linux,則需要安裝 openssh-server

1
sudo apt install openssh-server

安裝後,透過 systemctl 指令來啟動、檢查服務。

1
2
3
sudo systemctl enable ssh # 開機自動執行 sshd
sudo service ssh start    # 執行 sshd 服務
sudo systemctl status ssh # 檢查 sshd 服務狀態

若成功執行,會看到綠色 active

檢查 sshd 服務

Windows

Windows 底下除了透過 ssh -V 檢查客戶端是否安裝。

也可以透過 powershell 檢查並安裝:

1
2
# 檢查 OpenSSH 安裝狀態
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Installed 表示已安裝,NotPresent表示尚未安裝

目前此 Windows 可以看到 Client 已安裝,表示可以透過 SSH 連線到其他伺服器。

1
2
3
4
5
6
7
PS C:\Users\wells> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

sshd 目前沒有安裝。若要讓其他電腦可以透過 SSH 連線到此電腦,則透過 powershell 進行安裝。

以下為 OpenSSH.Client 與 OpenSSH.Server 的安裝指令:

1
2
3
4
5
# 安裝 OpenSSH.Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# 安裝 OpenSSH.Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

安裝 OpenSSH.Server 需要一段時間,安裝好後會出現 RestartNeeded: True,請先重開機。

Windows 安裝 SSH server

使用 Microsoft Defender 防火牆,對私人網路打開端口 22

如果有防毒軟體進行管理,此行不需要。但需要檢查防毒軟體的防火牆是否開啟端口 22。

1
netsh advfirewall firewall add rule name="Allow SSH from private network" dir=in action=allow protocol=TCP localport=22 profile=private

接著,啟用 SSH 服務與開機自動啟用:

1
2
3
4
5
# 設定每次電腦開機,自動啟動 sshd 服務
Set-Service -Name sshd -StartupType 'Automatic'

# 檢查 SSH 服務
Start-Service sshd

可以看到 sshd 的狀態,應該為 Running 狀態

1
2
3
4
5
PS C:\Users\wells> Get-Service sshd

Status   Name               DisplayName
------   ----               -----------
Running  sshd               OpenSSH SSH Server

至此,透過另一台電腦嘗試連線,便可以成功連線上伺服器終端

1
2
3
4
5
6
7
8
C:\Users\wells_nodeA>ssh wells@nodeB

ECDSA key fingerprint is SHA256:eaAI46GIucGkcFEeSAwO2GWsTOgr1919FyDoXsJKYG1.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
wells@nodeB's password: xxxxxx
Warning: Permanently added 'nodeB,100.100.120.16' (ECDSA) to the list of known hosts.

wells@nodeB C:\Users\wells_nodeB>

連線除錯方式

如果進行遠端連線失敗的話,可在連線時加入 -vvvv,進行排錯,例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
C:\Users\wells_nodeA>ssh -vvvv wells@nodeB

OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
debug1: Reading configuration data C:\\Users\\wells_nodeA/.ssh/config
debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> 'C:\\Users\\wells_nodeA/.ssh/known_hosts'
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug2: resolving "server" port 22
debug3: ssh_connect_direct: entering
debug1: Connecting to server [100.100.120.16] port 22.
debug3: finish_connect - ERROR: async io completed with error: 10060, io:00000299F796C380
debug1: connect to address 100.100.120.16 port 22: Connection timed out
ssh: connect to host server port 22: Connection timed out

可以看到 Connection timed out,表示可能的原因有:

  • 伺服器端的防火牆阻擋連線(電腦、防毒軟體、路由器)。
  • sshd 沒打開。
  • 客戶端的 port 22 被阻擋。
  • DNS 解析錯誤。

這些問題需要一步一步進 debug,更進一步的操作可以參照 Google 大神尋求協助。

建立金鑰

由上述的 SSH 連線行為,可以發現目前尚未設定金鑰,所以預設登入是使用密碼進行登入。

建立金鑰非常簡單,由客戶端或伺服器端上執行皆可進行。

這裡 Windows 與 Linux 產生金鑰的指令都是透過 ssh-keygen。

其中參數的部分:

  • -t ed25519 為產生一對 ed25519 金鑰。或將其改為-t rsa -b 4096,表示使用 RSA,長度為 4096 位元。
  • -C "xxx" 裡面的參數為任意值,主要是添加備註,幫助辨識金鑰是由誰建立的。
1
ssh-keygen -t ed25519 -C "your_email@example.com"

產金鑰的過程,會看到 Enter file in which to save the key 的路徑,預設是在個人目錄底下的 .ssh 資料夾底下。

決定好路徑後,會再詢問 passphrase(金鑰密碼),若為空值,未來在使用金鑰進行驗證時不需要密碼。若駭客取得到私鑰,還有第二道牆需要突破。

金鑰是儲存在個人電腦、個人帳戶,一般來說外洩的機會有難度。若害怕金鑰外洩的,可以輸入非空的數值。如此未來在使用金鑰驗證,還會額外要求輸入密碼以進行驗證。但相對又麻煩了…

passphrase 可以透過 ssh-agent 來實現快取,而在快取時間內不用輸入 passphrase。

此部分建議設定金鑰密碼以提高安全性。並使用 金鑰密碼搭配 ssh-agent 進行快取。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\wells_nodeA>ssh-keygen -t ed25519 -C "admin@wellstsai.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\wells_nodeA/.ssh/id_ed25519): C:\Users\wells_nodeA/.ssh/nodeA_ed25519
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in nodeA_ed25519
Your public key has been saved in nodeA_ed25519.pub
The key fingerprint is:
SHA256:hCRwfElJDbYaaG1JgyDTs4Mqn4tQpIiPhmTwMWIMRO0 admin@wellstsai.com
The key's randomart image is:
+--[ED25519 256]--+
|E=oo.o.+B=.      |
|o=+.+ +o*o+.     |
|=o+.  o ooo      |
|.+..     .       |
|*    S           |
|*oo..            |
|=Xo+             |
|*oo              |
|o.               |
+----[SHA256]-----+

於 nodeA 產出公私鑰後,可以到個人 .ssh 目錄下檢查:

1
2
3
4
5
6
7
##### Windows #####
C:\Users>ls C:\Users\wells_nodeA\.ssh\
authorized_keys    config    nodeA_ed25519    nodeA_ed25519.pub

##### Linux #####
wells@nodeA:~$ ls ~/.ssh/
authorized_keys  config  nodeA_ed25519  nodeA_ed25519.pub

其中,私鑰沒有副檔名(nodeA_ed25519),公鑰(nodeA_ed25519.pub)附檔名為 .pub

產完金鑰對後,便可以開始部署金鑰。

⚠️ 注意:

  1. 私鑰在本機(Local),公鑰在伺服器(Server)上。若在 node B 產出公私鑰,私鑰複製到 nodeA 後記得在 nodeB 上刪除私鑰。

  2. 私鑰確定只有自己能夠存取,在 Linux 上,若權限為 777,請透過 chmod 改為 400。

1
chmod 400 ~/.ssh/nodeA_ed25519

使用 SSH 金鑰建立兩台電腦連線

我們要把公鑰(nodeA_ed25519.pub)複製到伺服器上。可以透過 scp 這個程式。

用法為:scp 本地檔案路徑 使用者名稱@伺服器:伺服器路徑

Windows 複製公鑰到 Windows

1
scp C:\Users\wells_nodeA\.ssh\nodeA_ed25519.pub wells@nodeB:C:\Users\wells_nodeB\.ssh\nodeA_ed25519.pub

Windows 複製到 Linux

1
scp C:\Users\wells_nodeA\.ssh\nodeA_ed25519.pub wells@nodeB:~/.ssh/nodeA_ed25519.pub

輸入完密碼後,便可以把公鑰透過 scp 複製到伺服器上。

1
2
3
4
5
6
7
C:\Users>scp C:\Users\wells_nodeA\.ssh\nodeA_ed25519.pub wells@nodeB:C:\Users\wells_nodeB\.ssh\nodeA_ed25519.pub
wells@nodeB's password:
nodeA_ed25519.pub                                                                                  100%  102     1.1KB/s   00:00

C:\Users>scp C:\Users\wells_nodeA\.ssh\nodeA_ed25519.pub wells@nodeB:~/.ssh/nodeA_ed25519.pub
wells@nodeB's password:
nodeA_ed25519.pub                                                                                  100%  102     1.2KB/s   00:00

複製後,在 nodeB 上(伺服器端),新增檔案並填入公鑰內容。

使用者為根據 nodeB 的使用者

  • Windows 一般使用者:C:\Users\wells_nodeA\.ssh\authorized_keys
  • ⚠️ Windows 系統使用者:C:\ProgramData\ssh\administrators_authorized_keys
  • Linux 一般使用者/root:~/.ssh/authorized_keys
  1. 記事本開啟公鑰 (nodeA_ed25519.pub)
  2. 全選複製內容
  3. 新增上述檔案
  4. 在上述檔案內,貼上公鑰內容後存檔

在 authorized_keys 填入公鑰

最後,本地端 nodeA 新增 config 設定檔後儲存:

  • Windows:C:\Users\wells_nodeA\.ssh\config
  • Linux:~/.ssh/config
1
2
3
4
Host nodeB_wells
    User wells
    HostName nodeB
    IdentityFile ~/.ssh/nodeA_ed25519

設定檔內容說明

  • Host 為個人可辨識的名稱
  • User 是伺服器上的使用者名稱
  • HostName 為伺服器的 IP 或 host 名稱
  • IdentityFile 為私鑰路徑,Windows 與 Linux 上都可以使用 ~/ 表示個人目錄

儲存後,就可以實現以金鑰進行登入,若登入失敗要求輸入密碼,可以檢查

  • 金鑰是否正確
  • authorized_keys 路徑是否正確

進行 SSH 連線,此時不會要求輸入密碼

1
2
3
4
5
6
7
8
9
C:\Users\wells_nodeA>ssh wells@nodeB

Microsoft Windows [版本 10.0.22631.2861]
(c) Microsoft Corporation. 著作權所有,並保留一切權利。

wells@NODEB C:\Users\wells>exit
Connection to nodeB closed.

C:\Users\wells_nodeA>

使用 SSH 金鑰存取位於 Synology 上的 Git 伺服器

在本地端 Windows/Linux 上建立好金鑰後,將公鑰放置 Synology 的個人使用者目錄下的 .ssh 資料夾,沒有目錄的話需要自行建立。並新增 authorized_keys 並填入公鑰內容。

把公鑰放到個人目錄下的 .ssh 資料夾

在 .ssh 目錄新增 authorized_keys 並填入公鑰內容

在本地端上的 config 設定檔,填入主機資訊:

  • Windows:C:\Users\wells\.ssh\config
  • Linux:~\.ssh\config
1
2
3
4
Host NAS
    User wells
    HostName 192.168.50.12
    IdentityFile ~/.ssh/nodeA_ed25519

設定檔內容說明

  • Host 為辨識名稱
  • User 為 NAS 登入帳號
  • HostName 為 NAS IP
  • IdentityFile 為私鑰路徑

執行 git remote 相關指令時,則會優先使用金鑰進行認證,而不用輸入密碼。

使用 SSH 金鑰存取 Github

首先在 Github 建立新的 repo,若已經有 repo 的可略過此步驟。

建立新的 repo

建立後,github 會提供 SSH 的連結

1
git@github.com:WellWells/TEST_REPO.git

空的 repo 頁面

如果在本地端直接進行 clone,會跳出沒有權限:

1
2
3
4
5
6
7
wells@server:~$ git clone git@github.com:WellWells/TEST_REPO.git
Cloning into 'TEST_REPO'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

點擊右上方的個人圖示叫出選單,點選 Setting 進入設定頁面

點選右上方的個人圖示,叫出選單

左邊選擇 SSH and GPG keys,進入 SSH Key 頁面後,點擊 New SSH key 新增公鑰。

新增 SSH Key

貼上公鑰內容

在本地端上的 config 設定檔,填入主機資訊:

  • Windows:C:\Users\wells\.ssh\config
  • Linux:~\.ssh\config
1
2
3
Host github_wells
    HostName github.com
    IdentityFile ~/.ssh/nodeA_ed25519

設定檔內容說明

  • Host 為辨識名稱
  • HostName 固定為 github.com
  • IdentityFile 為私鑰路徑

在 clone 一次就可以正常使用金鑰存取 Github repo。

1
2
3
wells@server:~$ git clone git@github.com:WellWells/TEST_REPO.git
Cloning into 'TEST_REPO'...
warning: You appear to have cloned an empty repository.

進階安全設定

此章節適用於對安全性敏感的使用者,也建議設定以下相關 config 以達到更高的安全性。

關閉密碼認證

如果預設遠端伺服器 (nodeB) 走的是密碼認證,確定金鑰可以成功登入後,可以關閉密碼認證提高安全性。

設定檔路徑:

  • Windows:C:\ProgramData\ssh\sshd_config
  • Linux:/etc/ssh/sshd_config

找到約 50 行附近,並將 PasswordAuthentication 改為 no,記得移除前面的 #

1
2
---#PasswordAuthentication yes
+++PasswordAuthentication no

修改後,重啟 sshd 後,下次登入僅使用金鑰進行,若金鑰遺失則無法登入

透過 PowerShell 重啟 sshd

1
Restart-Service sshd

Linux 重啟 sshd

1
sudo service ssh restart

金鑰密碼搭配 ssh-agent

建立金鑰章節有說明 passphrase 預設可為空值,在進行 SSH 時不需要密碼。然而私鑰如果外洩,駭客可以直接透過此私鑰進行 SSH 連線。

在此,建立金鑰時可以加入 passphrase,並透過 ssh-agent 快取私鑰在記憶體中,只要輸入一次密碼後,都會透過此快取進行金鑰驗證。

以下操作使用 Windows 為範例,Linux 的操作基本相同一致。

其主要差異在 Windows 底下 SSH 執行檔分為兩包,分別為:

  1. OpenSSH 底下的 C:\Windows\System32\OpenSSH
  2. Git 目錄底下的 C:\Program Files\Git\usr\bin

故需要將 Git 的 sshCommand 更改為 OpenSSH 的路徑。

Windows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 更改 git 的 ssh.exe 為 OpenSSH 底下的路徑,若未更改,則無法使用儲存在 OpenSSH 記憶體的私鑰
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe

# 開機自動執行 ssh-agent
Get-Service ssh-agent | Set-Service -StartupType Automatic

# 啟動 ssh-agent
Start-Service ssh-agent

# 檢查 ssh-agent 的狀態
Get-Service ssh-agent

# 使用 ssh-add 把私鑰加入 ssh-agent,此時會要求輸入 passphrase
ssh-add C:\Users\wells\.ssh\nodeA_ed25519

# 列出當前 ssh-agent 中已載入的金鑰
ssh-add -l

# 刪除所有金鑰
# ssh-add -D

Linux:

1
2
3
4
5
# 若預設為 bash,則在 ~/.bashrc 末端加入以下行
eval "$(ssh-agent -s)"

# 新增私鑰到 ssh-agent,並輸入 passphrase
ssh-add ~/.ssh/nodeA_ed25519

macOS 指令可能有些不同,請參閱解法

確定 ssh-agent 已載入私鑰,私鑰可以備份至安全的地方,並在此電腦上移除。

只要 ssh-agent 有成功啟動,預設都會透過 agent 進行金鑰認證。

最終,本地端 nodeA 的 .ssh 資料夾,應該只有 known_hosts 與 config。

config 裡面的 IdentityFile 路徑也可以移除。

1
2
3
Host nodeB_wells
    User wells
    HostName nodeB

ssh-agent 預設時間是永久,若要提高安全性可以設定快取時間。

1
ssh-agent -t 1h

使用 SSH agent 轉發

Github 與 nodeB 上已經填入公鑰,本地端 nodeA 已經透過 ssh-add 新增私鑰到 ssh-agent。

所以本地端可以 SSH 到 nodeB,或透過進行 git 相關指令把 Github 的程式碼 clone 下來至 nodeA。

現在,若要在 nodeB 上進行 git clone 把 Github 的程式碼抓下來,私鑰不需要放到 nodeB。

可以透過 SSH agent 轉發實現私鑰轉發。

1
2
# 添加 -A 可以啟用 SSH 代理轉發。允許在遠端伺服器上使用本地的 SSH 金鑰。
ssh -A wells@nodeB

如果每次 SSH 都要帶參數覺得麻煩,也可以在 config 內新增 ForwardAgent

1
2
3
4
Host nodeB_wells
    User wells
    HostName nodeB
    ForwardAgent yes

連線後,遠端伺服器可以使用 ssh-add -l 檢查是否已經載入私鑰。

若已載入私鑰,此時便可透過該金鑰,在 nodeB 上進行 git clone。

Windows 預設自帶版本為 8.6p1,進行 agent 轉發後檢查伺服器上的私鑰是有載入的。

然而進行 git clone 會出現公鑰認證失敗,此部分為 OpenSSH Bug。

Windows 使用者可以到微軟 OpenSSH Release 手動安裝_8.9p1 後,進行 git 相關操作是正常的。

另外,如果遠端伺服器的信任度不高,可考慮改用 Proxyjump 進行跳板。其基本原理是私鑰儲存在 NodeA 上,當在 NodeB 存取 Github 時,可設定 NodeA 為跳板。

使用 Proxy 的好處是不從 NodeA 轉發金鑰到 NodeB 上,而是直接在 NodeA 上進行 SSH 操作,並把結果回傳至 NodeB。

如果 NodeB 的信任度較低(例如有其他使用者擁有更高的 root 權限),則應考慮使用 Proxyjump 進行代理操作。

參考文獻

  1. 允許遠端電腦取用你的 Mac
  2. 開始使用 OpenSSH for Windows
  3. OpenSSH Server
  4. 如何在 Windows 正確的安裝與設定 OpenSSH Server 服務
  5. 使用命令列管理 Windows 防火牆
  6. SSH 複雜密碼
  7. Adding a new SSH key to your GitHub account
  8. How to maintain ssh-agent login session with Windows 10’s new OpenSSH and PowerShell
  9. Automatically starting ssh-agent when powershell or git-bash are started
  10. 適用于 Windows 的 OpenSSH 中的金鑰型驗證
  11. Using SSH agent forwarding
  12. Ssh fails to use private key from ssh-agent: communication with agent failed
  13. SSH Agent Forwarding considered harmful
主題 Stack 由 Jimmy 設計