---
# System prepended metadata

title: PuTTY及Raspberry Pi設定SSH agent forwarding
tags: [SSH, Raspberry Pi, PuTTY]

---

---
title: "PuTTY及Raspberry Pi設定SSH agent forwarding"
description: "PuTTY及Raspberry Pi設定SSH agent forwarding"
# image: https://hackmd.io/screenshot.png
tags: SSH,Raspberry Pi,PuTTY
# robots: noindex, nofollow
langs: zh-Hant
---

> 此篇筆記已公開於**HackMD**：[@ShenTengTu/rkwtDACU8](https://hackmd.io/@ShenTengTu/rkwtDACU8)

# PuTTY及Raspberry Pi設定SSH agent forwarding
目標：Windows本地端使用PuTTY以SSH驗證的方式登入Raspberry Pi，並設定SSH agent forwarding，讓Raspberry Pi能轉發本地端SSH金鑰到第三方SSH Server(如 GitHub)進行SSH驗證。

## PuTTY設定
PuTTY的SSH agent為`pageant.exe`，是擁有GUI介面的SSH agent，要啟用代理轉發，要先啟動Pageant。跟Linux的`ssh-agent`類似，必須先將`*.ppk
`私鑰加入到Pageant，它會詢問passphrase,並在驗證成功後將金鑰暫時保留在記憶體中。

使用命令列來執行`pageant.exe`自動加載密鑰。
```
C:\PuTTY\pageant.exe d:\main.ppk d:\secondary.ppk
```

使用命令列來執行`pageant.exe`自動加載密鑰後，運行另一個程序。
```
C:\PuTTY\pageant.exe d:\main.ppk -c C:\PuTTY\putty.exe
```

而PuTTY SSH session必須設置
- SSH > Auth > 啟用"Allow agent forwarding"
- 不需額外設定私鑰路徑

可以將PuTTY安裝路徑加到`PATH`環境變數，然後建立包含以下腳本的批次檔`pageant-session.bat`。
```bat
start pageant "%USERPROFILE%\.ssh\your.ppk" -c putty -load %1
```

然後執行`./pageant-session.bat "your_ssh_ession"`。

## Raspberry Pi設定
- 將SSH公鑰內容加入到`~/.ssh/authorized_keys`
- 修改`/etc/ssh/ssh_config`設定
```
Host *
    ForwardAgent yes
    ...
```
- 修改`/etc/ssh/sshd_config`設定
```
...
PubkeyAuthentication yes
AllowAgentForwarding yes
...
```
 


## 驗證
在PuTTY SSH session下的Raspberry Pi終端：
```
$ echo $SSH_AUTH_SOCK
/tmp/ssh-NIEDeNTuAQ/agent.2161
$ ssh -T git@github.com
agent key xxxx returned incorrect signature type
Hi <UserID>! You've successfully authenticated, but GitHub does not provide shell access.
```

## 參考
- [Using SSH Agent Forwarding | GitHub Developer Guide](https://developer.github.com/v3/guides/using-ssh-agent-forwarding/)
- [Chapter 9: Using Pageant for authentication | PuTTY User Manual](https://www.ssh.com/ssh/putty/putty-manuals/0.68/Chapter9.html)
