TShopping

 找回密碼
 註冊
搜索
查看: 455|回復: 0

[CentOS] SSH原理與運用(二):遠程操作與端口轉發

[複製鏈接]
發表於 2019-2-23 18:22:45 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
1.jpg
七、遠程操作

SSH不僅可以用於遠程主機登錄,還可以直接在遠程主機上執行操作。

上一節的操作,就是一個例子:

  
  1. $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
複製代碼


單引號中間的部分,表示在遠程主機上執行的操作;後面的輸入重定向,表示數據通過SSH傳向遠程主機。

這就是說,SSH可以在用戶和遠程主機之間,建立命令和數據的傳輸通道,因此很多事情都可以通過SSH來完成。

下面看幾個例子。

【例1】

將$HOME/src/目錄下面的所有文件,複製到遠程主機的$HOME/src/目錄。

  
  1. $ cd && tar czv ​​src | ssh user@host 'tar xz'
複製代碼


【例2】

將遠程主機$HOME/src/目錄下面的所有文件,複製到用戶的當前目錄。

  
  1. $ ssh user@host 'tar cz src' | tar xz
複製代碼

v

【例3】

查看遠程主機是否運行進程httpd。

  
  1. $ ssh user@host 'ps ax | grep [h]ttpd'
複製代碼


八、綁定本地端口

既然SSH可以傳送數據,那麼我們可以讓那些不加密的網絡連接,全部改走SSH連接,從而提高安全性。

假定我們要讓8080端口的數據,都通過SSH傳向遠程主機,命令就這樣寫:

  
  1. $ ssh -D 8080 user@host
複製代碼


SSH會建立一個socket,去監聽本地的8080端口。一旦有數據傳向那個端口,就自動把它轉移到SSH連接上面,發往遠程主機。可以想像,如果8080端口原來是一個不加密端口,現在將變成一個加密端口。

九、本地端口轉發

有時,綁定本地端口還不夠,還必須指定數據傳送的目標主機,從而形成點對點的"端口轉發"。為了區別後文的"遠程端口轉發",我們把這種情況稱為"本地端口轉發"(Local forwarding)。

假定host1是本地主機,host2是遠程主機。由於種種原因,這兩台主機之間無法連通。但是,另外還有一台host3,可以同時連通前面兩台主機。因此,很自然的想法就是,通過host3,將host1連上host2。

我們在host1執行下面的命令:

  
  1. $ ssh -L 2121:host2:21 host3
複製代碼


命令中的L參數一共接受三個值,分別是"本地端口:目標主機:目標主機端口",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地端口2121,然後指定host3將所有的數據,轉發到目標主機host2的21端口(假定host2運行FTP,默認端口為21)。

這樣一來,我們只要連接host1的2121端口,就等於連上了host2的21端口。

  
  1. $ ftp localhost:2121
複製代碼


"本地端口轉發"使得host1和host3之間彷彿形成一個數據傳輸的秘密隧道,因此又被稱為"SSH隧道"。

下面是一個比較有趣的例子。

  
  1. $ ssh -L 5900:localhost:5900 host3
複製代碼


它表示將本機的5900端口綁定host3的5900端口(這裡的localhost指的是host3,因為目標主機是相對host3而言的)。

另一個例子是通過host3的端口轉發,ssh登錄host2。

  
  1. $ ssh -L 9001:host2:22 host3
複製代碼


這時,只要ssh登錄本機的9001端口,就相當於登錄host2了。

  
  1. $ ssh -p 9001 localhost
複製代碼


上面的-p參數表示指定登錄端口。

十、遠程端口轉發

既然"本地端口轉發"是指綁定本地端口的轉發,那麼"遠程端口轉發"(remote forwarding)當然是指綁定遠程端口的轉發。

還是接著看上面那個例子,host1與host2之間無法連通,必須藉助host3轉發。但是,特殊情況出現了,host3是一台內網機器,它可以連接外網的host1,但是反過來就不行,外網的host1連不上內網的host3。這時,"本地端口轉發"就不能用了,怎麼辦?

解決辦法是,既然host3可以連host1,那麼就從host3上建立與host1的SSH連接,然後在host1上使用這條連接就可以了。

我們在host3執行下面的命令:

  
  1. $ ssh -R 2121:host2:21 host1
複製代碼


R參數也是接受三個值,分別是"遠程主機端口:目標主機:目標主機端口"。這條命令的意思,就是讓host1監聽它自己的2121端口,然後將所有數據經由host3,轉發到host2的21端口。由於對於host3來說,host1是遠程主機,所以這種情況就被稱為"遠程端口綁定"。

綁定之後,​​我們在host1就可以連接host2了:

  
  1. $ ftp localhost:2121
複製代碼


這裡必須指出,"遠程端口轉發"的前提條件是,host1和host3兩台主機都有sshD和ssh客戶端。

十一、SSH的其他參數

SSH還有一些別的參數,也值得介紹。

N參數,表示只連接遠程主機,不打開遠程shell;T參數,表示不為這個連接分配TTY。這個兩個參數可以放在一起用,代表這個SSH連接只用來傳數據,不執行遠程操作。

  
  1. $ ssh -NT -D 8080 host
複製代碼


f參數,表示SSH連接成功後,轉入後台運行。這樣一來,你就可以在不中斷SSH連接的情況下,在本地shell中執行其他操作。

  
  1. $ ssh -f -D 8080 host
複製代碼


要關閉這個後台連接,就只有用kill命令去殺掉進程。

文章出處



 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2019-5-26 01:22 , Processed in 0.060756 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表