保護 SSH 隧道的安全

保護 SSH 隧道的安全

我們有一個使用 SSH 連接到伺服器的應用程式:應用程式的網路流量(資料庫、一些自訂 TCP 協定等)透過 SSH 連線進行隧道傳輸。

我們在伺服器上使用金鑰對和非特權帳戶,但用戶仍然可以使用他們的金鑰登入伺服器,或執行他們想要的任何連接埠重定向。

有沒有辦法將 SSH 伺服器設定為僅允許一些隧道(限制隧道的結束位址和連接埠),並禁用 shell 存取? (我們使用OpenSSH)

[編輯]

我碰到本文,似乎刪除 shell 存取權限還不夠。相應更改了標題和描述。

答案1

在您的authorized_keys 檔案中,您可以指定登入時將執行哪個命令。您可以簡單地設定該命令來運行一些會等待很長時間的命令。 sshd 人作為您可以在authorized_keys 檔案中使用的所有選項的清單。

permitopen="tsserver.example.org:3389",no-pty,no-agent-forwarding,no-X11-forwarding,command="/usr/local/stm_shell.sh" ssh-rsa AAAAB3....

我的 stm_shell.sh 是這樣的(它還強制執行 12 小時逾時)。我不能 100% 確定這是否完全安全。

#!/bin/bash

# send a hang-up after this process exits
shopt -s huponexit
# maximum session length in hours
CONNECT_TIME=12
sleep $[CONNECT_TIME*60]
kill $PPID

答案2

將使用者的 shell 設定為 /bin/false 可能會滿足您的要求。

答案3

也許 sshd_config (man sshd_config) 中的「ChrootDirectory」關鍵字可能會提供更多額外的安全性。

答案4

我相信您可以將ForceCommand指令設定為/bin/false阻止 shell 存取。

相關內容