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