使用 PuTTY 且無 shell 的受限用戶的 SSH 隧道

使用 PuTTY 且無 shell 的受限用戶的 SSH 隧道

因此,我已經使用 SSH 隧道來限制對內部網站或部分公共網站的存取權有一段時間了,並且由於只有管理員才具有 SSH 存取權限,所以我一直在使用標準的非 root/sudo 使用者帳戶。現在,我正在擴展並試圖讓當地大學的學生參與擴展他們的項目,他們將需要開始訪問其中一些內部頁面。

代理伺服器是一個 CentOS 6.4 機器,啟用了 SELinux,除了代理之外不會運行任何其他服務。我希望最終設置一個完整的 VPN,但在這種情況下,它只是允許訪問具有 IP 白名單的某些計算機,而不是完整的內部網路存取。

我已經研究了使用具有 /bin/false 等內容的使用者帳戶來設定 SOCKS 代理程式的所有方法,但是要么

A)他們假設只有一個連接埠或主機被轉送(而在這種情況下,我有一組 VPS 實例,它們將根據網路配置中的需求進行更改),或者

B) 使用的是常規SSH 用戶端,而不是像PuTTY 這樣的客戶端(儘管我很想強迫所有學生使用虛擬機器或直接安裝Linux,但這並不是一個選擇,因為學校在他們的工程中使用PuTTY )供學生使用的硬體)。

這是我到目前為止發現的內容:如果使用常規ssh 用戶端,我可以將用戶shell 設定為/bin/false,並且用戶可以在設定SOCKS 代理程式時指定-N 命令,但不幸的是,對於PuTTY 用戶來說,這似乎不起作用(至少我無法讓它工作)。

當 PuTTY 透過預設隧道選項開啟隧道時,它必須開啟一個 shell,該 shell 在登入時立即斷開連接,因為使用者俱有 /bin/false shell。代理選項似乎沒有設定。如果我嘗試在遠端命令的 SSH 選項中設定代理,它仍然不會運行,除非我在選項中允許 shell 或其他命令。

我發現但不太適合的相關問題:

使用 PuTTY 和 nologin 建立 SOCKS 隧道 (這個在技術上是可行的,但shell 只是一個運行很長時間的睡眠命令,我擔心它會被轉義。我寧願有一個真正的noshell,也不願有一個出於安全原因而簡單掛起的shell )

https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding (這不起作用,因為它要求用戶使用真正的 ssh 安裝,並且像 PuTTY 這樣的程式將不起作用)。我還需要它們能夠訪問網頁,儘管我假設我可以簡單地為帳戶指定 PermitTunnel 而不是只允許特定連接埠。

ssh 代理用戶的“noshell” (由於我上面提到的有關 PuTTY 需要啟用命令來設定 SOCKS 代理的原因,此功能不適用於 PuTTY)

有什麼建議麼?我很容易會錯過一些東西,但我不確定。

-吉姆

答案1

我找到了一個解決方案(在此處的帖子下,沒有使用nologin 或noshell 等標籤,而是對Windows 用戶來說是一個非常簡單的技巧,但我讓它在沒有shell 的情況下為我工作) 。

我使用這篇文章中的答案建立了一個批次腳本,該腳本可以運行 PuTTY 的預設安裝並設定隧道,而無需執行會導致 shell 斷開連接的命令:

對於我的 Windows 用戶來說非常簡單的 SSH 隧道

"C:\Program Files (x86)\PuTTY\plink.exe" -v -N -D localhost:8080 proxy@remote_host

由於這使得使用 PuTTY 的 Windows 用戶現在能夠存取隧道,因此我可以堅持使用帳戶 shell 作為 /bin/false

在此發布,供可能遇到類似情況並解決該問題的任何人使用。如果還有其他解決方案,我很想聽聽看!

現在我只需要嘗試使用我在所有系統上實現的基於 SSH 推送的雙因素系統來完成這項工作,但這是在其他一切都正常工作之後才需要做的事情。

-吉姆

答案2

剛剛看到 PuTTY 有以下選項,它可能是您正在尋找的: 連線->SSH->不啟動 shell 或命令

如果啟用,則會建立連接,控制台上不再顯示,但它保持活動狀態並且隧道運作正常。希望能幫助你。

相關內容