SSH原理與運用(二)

2021-08-20 17:22:45 字數 3876 閱讀 5486

日期: 2023年12月23日

接著前一次的文章,繼續介紹ssh的用法。

***********************************====

ssh原理與運用(二):遠端操作與埠**

七、遠端操作

ssh不僅可以用於遠端主機登入,還可以直接在遠端主機上執行操作。

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

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

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

這就是說,ssh可以在使用者和遠端主機之間,建立命令和資料的傳輸通道,因此很多事情都可以通過ssh來完成。

下面看幾個例子。

【例1】

將$home/src/目錄下面的所有檔案,複製到遠端主機的$home/src/目錄。

$ cd && tar czv src | ssh user@host 'tar xz'

【例2】

將遠端主機$home/src/目錄下面的所有檔案,複製到使用者的當前目錄。

$ ssh user@host 'tar cz src' | tar xzv

【例3】

檢視遠端主機是否執行程序httpd。

$ ssh user@host 'ps ax | grep [h]ttpd'

八、繫結本地埠既然ssh可以傳送資料,那麼我們可以讓那些不加密的網路連線,全部改走ssh連線,從而提高安全性。

假定我們要讓8080埠的資料,都通過ssh傳向遠端主機,命令就這樣寫:

$ ssh -d 8080 user@host

ssh會建立乙個socket,去監聽本地的8080埠。一旦有資料傳向那個埠,就自動把它轉移到ssh連線上面,發往遠端主機。可以想象,如果8080埠原來是乙個不加密埠,現在將變成乙個加密埠。

九、本地埠**

有時,繫結本地埠還不夠,還必須指定資料傳送的目標主機,從而形成點對點的"埠**"。為了區別後文的"遠端埠**",我們把這種情況稱為"本地埠**"(local forwarding)。

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

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

$ ssh -l 2121:host2:21 host3

命令中的l引數一共接受三個值,分別是"本地埠:目標主機:目標主機埠",它們之間用冒號分隔。這條命令的意思,就是指定ssh繫結本地埠2121,然後指定host3將所有的資料,**到目標主機host2的21埠(假定host2執行ftp,預設埠為21)。

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

$ ftp localhost:2121

"本地埠**"使得host1和host3之間彷彿形成乙個資料傳輸的秘密隧道,因此又被稱為"ssh隧道"。

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

$ ssh -l 5900:localhost:5900 host3

它表示將本機的5900埠繫結host3的5900埠(這裡的localhost指的是host3,因為目標主機是相對host3而言的)。

另乙個例子是通過host3的埠**,ssh登入host2。

$ ssh -l 9001:host2:22 host3

這時,只要ssh登入本機的9001埠,就相當於登入host2了。

$ ssh -p 9001 localhost

上面的-p引數表示指定登入埠。

十、遠端埠**

既然"本地埠**"是指繫結本地埠的**,那麼"遠端埠**"(remote forwarding)當然是指繫結遠端埠的**。

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

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

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

$ ssh -r 2121:host2:21 host1

r引數也是接受三個值,分別是"遠端主機埠:目標主機:目標主機埠"。這條命令的意思,就是讓host1監聽它自己的2121埠,然後將所有資料經由host3,**到host2的21埠。由於對於host3來說,host1是遠端主機,所以這種情況就被稱為"遠端埠繫結"。

繫結之後,我們在host1就可以連線host2了:

$ ftp localhost:2121

這裡必須指出,"遠端埠**"的前提條件是,host1和host3兩台主機都有sshd和ssh客戶端。

十一、ssh的其他引數

ssh還有一些別的引數,也值得介紹。

n引數,表示只連線遠端主機,不開啟遠端shell;t引數,表示不為這個連線分配tty。這個兩個引數可以放在一起用,代表這個ssh連線只用來傳資料,不執行遠端操作。

$ ssh -nt -d 8080 host

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

$ ssh -f -d 8080 host

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

二、參考文獻

* ssh, the secure shell: the definitive guide: 2.4. authentication by cryptographic key, o'reilly

* ssh, the secure shell: the definitive guide: 9.2. port forwarding, o'reilly

* shebang: tips for remote unix work (ssh, screen, and vnc)

* brihatch: ssh host key protection

* brihatch: ssh user identities

* ibm developerworks: 實戰 ssh 埠**

* jianing yang:ssh隧道技術簡介

* wikibooks: internet technologies/ssh

* buddhika chamith: ssh tunneling explained

SSH原理與運用

簡單說,ssh secure shell 安全外殼協議是一種網路協議,用於計算機之間的加密登入。ssh是建立在應用層和傳輸層基礎上,預設埠是22,為遠端登入會話和其他網路服務提供安全性的協議。ssh是替代telnet 預設埠是23 和其他遠端控制台管理應用程式的行業標準。如果乙個使用者從本地計算機,...

SSH原理與運用

ssh原理與運用 一 什麼是ssh?簡單說,ssh是一種網路協議,用於計算機之間的加密登入。如果乙個使用者從本地計算機,使用ssh協議登入另一台遠端計算機,我們就可以認為,這種登入是安全的,即使被中途截獲,密碼也不會洩露。最早的時候,網際網路通訊都是明文通訊,一旦被截獲,內容就暴露無疑。1995年,...

SSH原理與運用

簡單說,ssh是一種網路協議,用於計算機之間的加密登入。如果乙個使用者從本地計算機,使用ssh協議登入另一台遠端計算機,我們就可以認為,這種登入是安全的,即使被中途截獲,密碼也不會洩露。最早的時候,網際網路通訊都是明文通訊,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者tatu ylonen設計了...