為了滿足“break qiang”的需要,在國外的Linux主機上(比如 DreamHost )上建個可 ssh登錄的用戶,使用 ssh 的 Tunnel 來作代理是十分常見的方法。
但是主人往往又想最小化用戶權限,以避免對系統造成影響。最簡單的辦法就是,禁止用戶登錄。
其實 ssh 可以連接到 sshd 但是不執行遠程命令(默認是啟動用戶設定的 shell ),使用 -N 參數即可。
在服務器上建一個 username :
添加用戶:useradd -s /bin/false username,將用戶的shell設置成/bin/false。這樣用戶就無法與系統進行交互。
設置密碼:passwd username
當然對已有的用戶也可以更改用戶權限為只能tcp轉發:
復制代碼代碼如下:usermod -s /bin/false USERNAME
也可以使用 /usr/bin/passwd 作為用戶的 shell ,這樣用戶就可以通過登錄而來自主修改密碼。需要注意的是,需要將 /usr/bin/passwd 這一行寫進 /etc/shells文件。
sshd 認證通後之後,會檢查設定的 shell 是否登記在 /etc/shells 文件中,若已經登記,則fork自己,然後fork出來的子進程再exec 設定的 shell 。而 ssh 的 -N 參數,則是告訴 sshd 不需要執行 shell。
建立Tunnel:
復制代碼代碼如下:ssh -D 1080 -qfnN username@hostname
輸入密碼即可使用(也可以用key認證)。
Windows的話,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本質上也是使用plink.exe來建立Tunnel)。
此時賬號username 可以通過sshd的認證使用 TcpForwarding ,但是不能運行 shell,不能與系統交互。剛好可以用來為朋友提供國外的代理break qiang。
參數詳解:
-D 1080 建立動態Tunnel,監聽在本地1080端口。
-q 安靜模式。
-f ssh在後台運行,即認證之後,ssh退居後台。
-n 將 stdio 重定向到 /dev/null,與-f配合使用。
-N 不運行遠程程序。即通知 sshd 不運行設定的 shell。