重定向 SSH 使用者伺服器端
我知道我可以通過
~/.ssh/config
or在客戶端為特定使用者/伺服器創建快捷方式/etc/ssh/ssh_config
,但我想做類似的事情,但在伺服器端。也就是說,當我在客戶端上發佈時:
ssh pub@name.server.top
我實際上是 chrooted
/home/jon/pub
我將在
name.server.top
哪裡使用 sftp。在
/etc/ssh/sshd_config
我看到的例子如下:Subsystem sftp internal-sftp Match user pub ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
下面的工作也可以嗎?
ChrootDirectory /home/jon/pub
是否可以將其創建
pub
為一種虛擬使用者?也就是說,遠端使用者登錄為pub
並且他的公鑰在 中/home/jon/.ssh/authorized_keys
,因此根本無需創建單獨/home/pub/.ssh/authorized_keys
的目錄或/home/pub
目錄。
我在虛擬機上下文中對此進行了測試:SSH 伺服器是 Cygwin(也是 VM 主機);客戶端是 Arch Linux SSH(也是 VM 來賓)。
我使用了以下腳本。
我不是 chrooting,所以我不需要複製共享文件夾中的任何二進製文件,只需複制公鑰。無論如何,我認為,使用 internal-sftp(不是 SSH),應該減少二進制要求。
#!/bin/sh ## Setup SFTP access on server side ## using an alias user and to a subdir of the aliased user home ## ------------------------------------------------------------ ## Customise ## Shared path inside the aliased user home sharedpath="/home/jon/pub" ## Aliased user name altuser="pub" ## Path to the public key of aliased user pubkey=~/.ssh/pub_rsa.pub ## Add aliased user to /etc/passwd user=`grep ^$USER /etc/passwd` txt="$altuser:`echo $user | cut -d: -f2-5`" txt="$txt:$sharedpath:`echo $user | cut -d: -f7`" echo $txt>>/etc/passwd ## Set user rules in sshd_config txt="Match User $altuser ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no " echo "$txt" >>/etc/ssh/sshd_config ## Copy the public key in the shared folder mkdir -p "$sharedpath/.ssh" cp "$pubkey" "$sharedpath/.ssh/" ## Format sftp line echo "You can now run on the client (adjust paths accordingly):" echo "sftp -i ${pubkey%.*} $altuser@name.server.top"
如果它可以工作,你可能應該有:
ChrootDirectory /home/jon
pub
in的主目錄/etc/passwd
設置為/pub
.
/home/jon
必須由 擁有root
且只能由root
.您還需要一個工作根目錄,其中包含您需要的所有內容
/home/jon
,例如bin
(用於 shell)、lib
(共享庫)、etc
(用於 uid 到名稱轉換的密碼)等等。您所追求的很可能不是 ChrootDirectory。
相反,您可以嘗試
/etc/passwd
使用 /home/jon 下的不同主目錄使用您希望的“別名”使用者名創建多個條目。您可以為使用者分配相同的數字 UID 和 GIDjon
。不過,我不確定公鑰身份驗證能否令人滿意地工作。試試看並發表評論。