1、用ssh做正向連接
啥叫正向連接?就是client連上server,然后把server能訪問的機器地址和端口(當然也包括server自己)鏡像到client的端口上。
命令:
ssh -L [客戶端IP或省略]:[客戶端端口]:[服務器側能訪問的IP]:[服務器側能訪問的IP的端口] [登陸服務器的用戶名@服務器IP] -p [服務器ssh服務端口(默認22)]
其中,客戶端IP可以省略,省略的話就是127.0.0.1了,也就是說只能在客戶端本地訪問。服務器IP都可以用域名來代替。
舉例說明:
你的IP是192.168.1.2,你可以ssh到某台服務器8.8.8.8,8.8.8.8可以訪問8.8.4.4,你內網里還有一台機器可以訪問你。
如果你想讓內網里的另外一台電腦訪問8.8.4.4的80端口的http服務,那么可以執行:
ssh -L 192.168.1.2:8080:8.8.4.4:80 test@8.8.8.8
也就是說,ssh到8.8.8.8上,然后讓8.8.8.8把8.8.4.4的80端口映射到本地的8080端口上,而且和本地192.168.1.2這個IP綁定。
內網里的另外一台機器可以通過IE瀏覽器中輸入http://192.168.1.2:8080查看8.8.4.4的網頁。
當然,如果是其他服務,比如ftp、ssh、遠程桌面也是可以的。不過,VPN貌似是不行的,可能是因為GRE協議無法通過。
2、用ssh做反向連接
啥叫反向連接?就是client連上server,然后把client能訪問的機器地址和端口(也包括client自己)鏡像到server的端口上。
反向連接用得可能更多一些。比如你的客戶端在內網,在外網是無法直接訪問到的,這時用反向連接打通一條隧道,就可以從外網通過這條隧道進來了。
命令:
ssh -R [服務器IP或省略]:[服務器端口]:[客戶端側能訪問的IP]:[客戶端側能訪問的IP的端口] [登陸服務器的用戶名@服務器IP] -p [服務器ssh服務端口(默認22)]
其中,服務器IP如果省略,則默認為127.0.0.1,只有服務器自身可以訪問。指定服務器外網IP的話,任何人都可以通過[服務器IP:端口]來訪問服務。當然,這個時候服務器本機也要輸入外網IP:端口來訪問。
舉例說明:
你的IP是192.168.1.2,你可以ssh到外網某台服務器8.8.8.8,你內網里有一台機器192.168.1.3。
如果你想讓外網所有的能訪問8.8.8.8的IP都能訪問192.168.1.3的http服務,那么可以執行:
ssh -R 8.8.8.8:8080:192.168.1.3:80 test@8.8.8.8
也就是說,ssh到8.8.8.8上,然后把本地局域網內192.168.1.3的80端口映射到8.8.8.8的8080端口上,這樣外網任何一台可以訪問8.8.8.8的機器都可以通過8080端口訪問到內網192.168.1.3機器的80端口了。
反向連接同樣支持各種服務。
3、用ssh做socks代理假設你內網里某台機器可以上網,但是你不能上網,如果你有ssh到那台機器的權限,那么就可以利用ssh方式建立一個代理socks5,通過代理來上網。
命令:
ssh -D [本地IP或省略]:[本地端口] [登陸服務器的用戶名@服務器IP] -p [服務器ssh服務端口(默認22)]
道理和上面是一樣的,執行這個命令之后,本地會監聽指定的端口等待連接。
網上好多文章說Firefox和Chrome要下載什么插件才能支持,其實都是扯淡。
在配置代理的時候直接選擇Sock5就可以了,不需要用戶名和密碼驗證。另外,IE也是支持Sock5的,具體配置方法是:勾選為LAN使用代理服務器,然后任何字段都不要填,點“高級”按鈕,在套接字里面填好相應的配置,其他都留空。
Chrome默認采用IE的配置,所以如果IE配置好了,Chrome也是可以上網的。
另外,可以使用一個叫做Sockscap的軟件,把應用扔進去就能以代理的方式上網了。(部分需要調用多個進程的應用可能不行)
說句題外話,QQ2012版目前的Socks5代理上網功能貌似不支持本地Socks5代理,不過可以選擇“瀏覽器配置”方式來規避。
把socks代理轉換成http代理
如果你想把socks代理轉換成http代理,可以用privoxy這個東東。去官網下載個.zip的文件包,然后解壓到任意目錄,執行可執行文件。
在主界面點擊Options菜單->Edit Main Configuration,在彈出的文本文件中搜索forward-socks5,找到的章節就是講socks5轉換的。
回車新建一行,輸入forward-socks5 / [本地IP]:[本地端口] . 注意后面還有個“.”,然后保存。
這樣就可以實現把socks5代理轉換成127.0.0.1:8118的http代理了。程序可以通過127.0.0.1:8118這個http代理上網。
如果你想讓局域網內其他IP也能通過你的機器上網,需要修改配置文件中的listen-address部分,搜索一下相信你就會看明白了。
4、Windows下的ssh和ssh server
不要以為只有Linux下才能用ssh,Windows下一樣有強大的ssh命令行工具和ssh服務器。並且對以上功能支持的都很好。
那就是偉大的PuTTY!去官方網站下載吧!ssh命令行客戶端對應的是plink.exe,命令稍微有一點不同(比如指定端口是大寫的P),具體看幫助文件稍作修改就好了。
ssh服務器端是WinSSHD,傻瓜式安裝,默認配置支持windows用戶認證。
5、自動連接和防斷線腳本
如果你想讓連接長期保持,可以寫個腳本來保證因為網絡原因斷線的話可以自動重連。
先說Windows平台,用plink -pw參數可以指定密碼,所以只要寫個批處理:
:1
plink -pw “password” -D 7070 user@serverip
goto 1
這樣應該就可以解決大多數問題造成的斷線。
Linux平台ssh默認不支持把密碼作為參數,不過有sshpass可以搞定
http://sourceforge.net/projects/sshpass/files/latest/download
下載,解壓,編譯,把可執行文件拷貝到合適的目錄,執行命令格式如下:
sshpass -p "password" ssh -D 7070 user@serverip
貌似ubuntu下可以直接apt-get install sshpass
然后寫腳本autossh.sh,內容如下:
#!/bin/bash
while [ '' == '' ]do ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l` if [ "$ssh_d_process_num" == "0" ]; then /home/user/sshpass -p "password" ssh -D 7070 user@ServerIP & fi
sleep 300done
執行一下這個腳本就可以了。sleep 300代表300秒查看一次,可以根據需要調整。
6、常用參數
其實一般來說不是很有必要加特殊的參數,不過以下幾個可以根據需要選擇
-q 靜默運行,就算出錯也啥都不提示
-f 后台運行
-C 壓縮,帶寬很差的時候壓縮會快一些,否則會更慢
-i xxx.file 提供公鑰文件直接驗證
-l 指定用戶名,其實就是@前面寫的那個。
其他的不太常用,自己查手冊吧~