最近需要從外網(wǎng)通過(guò)ssh訪問(wèn)內(nèi)網(wǎng)主機(jī),但是又不具備給路由器添加端口映射的權(quán)限,于是用到了ssh的遠(yuǎn)程端口轉(zhuǎn)發(fā)。于是打算在這里整理一下ssh常用的功能和用法。
但由于細(xì)節(jié)特別多,一次肯定寫(xiě)不完,因此有些細(xì)節(jié)會(huì)暫時(shí)省略,待日后補(bǔ)上,特別是截圖。
1、使用用戶名/密碼登陸
這是最基本的了,也沒(méi)什么好說(shuō)的。
ssh user@remote_host [-p port]
其中-p用來(lái)指定端口(如果端口不是默認(rèn)的22的話)
2、使用密鑰對(duì)登陸(此部分有待細(xì)化)
為了保證安全,可以在把本地產(chǎn)生的密鑰對(duì)的公鑰文件傳到服務(wù)端,這樣登陸的時(shí)候就不需要輸入用戶名/密碼了。當(dāng)然如果產(chǎn)生密鑰對(duì)的時(shí)候還使用了口令,這時(shí)還是需要輸入口令,這可以用ssh-agent來(lái)解決~~越來(lái)越懶了。當(dāng)然如果你想在某個(gè)服務(wù)端再登陸到另一個(gè)服務(wù)端,那么可以開(kāi)啟ssh-agent的轉(zhuǎn)發(fā)功能~~真是懶到家了。
3、端口轉(zhuǎn)發(fā)(此部分有待截圖)
這里分為四種,本地轉(zhuǎn)發(fā),遠(yuǎn)程轉(zhuǎn)發(fā),動(dòng)態(tài)轉(zhuǎn)發(fā)和X轉(zhuǎn)發(fā)
1)、共用參數(shù)
先說(shuō)明常見(jiàn)的參數(shù)
-f ? ? 后臺(tái)認(rèn)證用戶/密碼,通常和-N連用,不用登錄到遠(yuǎn)程主機(jī)。
-N ? 不執(zhí)行腳本或命令,通常與-f連用
2)、本地轉(zhuǎn)發(fā)
ssh -f -N ?-L local_port:remote_host:remote_port ?username@tunnel_host
這句命令需要在本地輸入,意思就是在本地打開(kāi)local_port端口監(jiān)聽(tīng),把發(fā)送到這個(gè)端口的TCP數(shù)據(jù)包經(jīng)過(guò)tunnel_host之后,發(fā)送到remote_host的remote_port上。
比如我想把發(fā)送到本地10000端口的tcp數(shù)據(jù)包經(jīng)過(guò)1.1.1.1轉(zhuǎn)發(fā)到1.2.3.4的20000端口,那么可以這么寫(xiě):
ssh -f -N -L 10000:1.2.3.4:20000 ?username@1.1.1.1
如果tunnel_host和remote_host相同,那么就相當(dāng)于直接發(fā)送到remote_host了,不經(jīng)過(guò)另一臺(tái)機(jī)器。
3)、遠(yuǎn)程轉(zhuǎn)發(fā)
ssh -f -N ?-R remote_port:local_host:local_port user@tunnel_host
這句命令需要在本地輸入,意思是在remote_host(在這里remote_host == tunnel_host)上打開(kāi)監(jiān)聽(tīng)remote_port,把傳給remote_port的tcp數(shù)據(jù)轉(zhuǎn)發(fā)到本地主機(jī)的local_port。
按道理來(lái)講,remote_host應(yīng)該可以不等于tunnel_host,但是我沒(méi)有這個(gè)需求也就沒(méi)有嘗試了,有待實(shí)驗(yàn)。
遠(yuǎn)程轉(zhuǎn)發(fā)通常用在外網(wǎng)想主動(dòng)連接內(nèi)網(wǎng)主機(jī)的時(shí)候,本質(zhì)上就是內(nèi)網(wǎng)主機(jī)先建立一條通向外網(wǎng)主機(jī)的連接,然后讓外網(wǎng)主機(jī)直接順著這條連接發(fā)送數(shù)據(jù)給內(nèi)網(wǎng)主機(jī):
ssh -f -N -R 10000:localhost:22 user1@1.1.1.1
那么我用
ssh user2@1.1.1.1 -p 10000
就可以通過(guò)ssh連接內(nèi)網(wǎng)主機(jī)了。
值得注意的是,user1是服務(wù)器的用戶名而user2是內(nèi)網(wǎng)主機(jī)的用戶名
3)、動(dòng)態(tài)轉(zhuǎn)發(fā)
之前兩種的轉(zhuǎn)發(fā)都是指定了轉(zhuǎn)發(fā)目的地的端口,那動(dòng)態(tài)轉(zhuǎn)發(fā)的意思就是根據(jù)數(shù)據(jù)包的協(xié)議動(dòng)態(tài)選擇轉(zhuǎn)發(fā)的目的端口。多用于翻墻。
ssh -N -f -D 1080 user@remote_host ?#將端口綁定在127.0.0.1:1080上
ssh -N -f -D 0.0.0.0:1080 user@remote_host ?# 將端口綁定在0.0.0.0:1080上
4)、X轉(zhuǎn)發(fā)
X轉(zhuǎn)發(fā)就是說(shuō)通過(guò)ssh轉(zhuǎn)發(fā)X11協(xié)議的數(shù)據(jù),簡(jiǎn)單的說(shuō)就是直接在本地運(yùn)行遠(yuǎn)程的帶有GUI的程序。
講道理X轉(zhuǎn)發(fā)可以用遠(yuǎn)程轉(zhuǎn)發(fā)來(lái)實(shí)現(xiàn),但是比較麻煩。
打開(kāi)X轉(zhuǎn)發(fā)需要保證/etc/ssh/sshd_config(配置文件的路徑隨不同linux發(fā)行版有可能會(huì)發(fā)生改變)鐘的X11Forwarding是yes的。
ssh –X user@remote_host