我可以透過 SSH 從本機 A 登入跳轉主機伺服器ssh B
B。
伺服器 C 只能尋址(位址為 C.internal)並且可以透過 B 從伺服器 C 存取ssh C
。
如何直接從本機透過 SSH 連線到 C?
SSH 指令和設定檔是什麼樣的?
A 上的 ssh 設定:
Host B
User userB
HostName B.example.com
IdentityFile ~/.ssh/keyB
B 上的 ssh 設定:
Host C
HostName C.internal
User userC
IdentityFile ~/.ssh/keyC
是否可以在不~/.ssh/keyC
從主機 B 複製到本機電腦 A 的情況下執行此操作?
答案1
有幾個選項,但沒有一個是「單一命令」:
您可以向 B 執行一個 SSH 指令,然後只向 C 執行第二個 SSH 指令;您需要新增-t
選項以使其適用於互動式 SSH:
ssh -t hostB "ssh hostC"
ssh -t hostB "ssh -t hostC htop"
ssh hostB ssh hostC ls -la /etc
如果您想要一種從 A「直接」透過 SSH 到 C 的方法,您將需要一些額外的裝置來轉發 ssh-agent 連接從B到本機系統(即與通常情況相反ssh -A
)。
透過 SSH 連接到主機 B,然後在手動指定的路徑啟動 ssh-agent。使用 SSH“流轉發”功能允許本地客戶端存取遠端代理進程:
HostA$ ssh -t -L /tmp/agent:/tmp/agent HostB \ "ssh-agent -a /tmp/agent sh -c 'ssh-add ~/.ssh/keyC && sleep infinity'"
(ssh/config 選項是
LocalForward
。)只要上述連線正在運行,您就可以使用常規 ProxyJump 配置從 HostA 連接到 HostC,並使用僅存在於 HostB 上的金鑰:
HostA$ export SSH_AUTH_SOCK=/tmp/agent HostA$ ssh -J HostB HostC
(ssh/config 選項是
IdentityAgent
和ProxyJump
。)
另一種選擇是從 B 複製keyC
到 A 並存儲在安全硬體上例如 TPM 晶片或智慧卡(具有 PIV 模式的 Yubikey 也算在內)。這允許在機器 A 上本地使用密鑰,而不會被盜。
(對於 Linux 上的 TPM2.0,您可以選擇tpm2-pkcs11
或ssh-tpm-agent
;Windows 上的 TPM2.0 可以透過 PuTTY-CAC 使用。對於具有 PIV 的 Yubikey,有適用於 Windows 和 Linux 的 PKCS#11 模組。我正在使用來自Ebay 的eToken 5110。
答案2
您需要一個 ssh_config 文件,例如 global/etc/ssh/ssh_config
或 as user ~/.ssh/config
:
Host B
HostName 10.0.0.1
User username_on_B
IdentityFile ~/.ssh/id_rsa_for_B
ForwardAgent yes
# final destination
Host C
HostName C.internal
User your_username_on_C
ProxyJump B
IdentityFile ~/.ssh/id_rsa_for_C
現在,從A
,您可以ssh
C
。