溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

有哪些使用SSH的技巧

發(fā)布時(shí)間:2021-09-27 09:51:53 來(lái)源:億速云 閱讀:141 作者:iii 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容主要講解“有哪些使用SSH的技巧”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“有哪些使用SSH的技巧”吧!

1. 多條連接共享

如果你需要在多個(gè)窗口中打開到同一個(gè)服務(wù)器的連接,而不想每次都輸入用戶名,密碼,或是等待連接建立,那么你可以配置SSH的連接共享選項(xiàng),在本地打開你的SSH配置文件,通常它們位于~/.ssh/config,然后添加下面2行:

代碼如下:

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r

現(xiàn)在試試斷開你與服務(wù)器的連接,并建立一條新連接,然后打開一個(gè)新窗口,再創(chuàng)建一條連接,你會(huì)發(fā)現(xiàn),第二條連接幾乎是在瞬間就建立好了。

Windows用戶

如果你是Windows用戶,很不幸,最流行的開源SSH客戶端Putty并不支持這個(gè)特性,但是Windows上也有OpenSSH的實(shí)現(xiàn),比如這個(gè)Copssh,如果你覺(jué)得下面的一些技巧對(duì)你很有幫助,或許你應(yīng)該試試Copssh。

文件傳輸

連接共享不止可以幫助你共享多個(gè)SSH連接,如果你需要通過(guò)SFTP與服務(wù)器傳輸文件,你會(huì)發(fā)現(xiàn),它們使用的依然是同一條連接,如果你使用的 Bash,你會(huì)發(fā)現(xiàn),你甚至SSH甚至支持Tab對(duì)服務(wù)器端文件進(jìn)行自動(dòng)補(bǔ)全,共享連接選項(xiàng)對(duì)于那些需要借助SSH的工具,比如rsync,git等等也 同樣有效。

2. 長(zhǎng)連接

如果你發(fā)現(xiàn)自己每條需要連接同一個(gè)服務(wù)器無(wú)數(shù)次,那么長(zhǎng)連接選項(xiàng)就是為你準(zhǔn)備的:

代碼如下:

ControlPersist 4h

現(xiàn)在你每次通過(guò)SSH與服務(wù)器建立連接之后,這條連接將被保持4個(gè)小時(shí),即使在你退出服務(wù)器之后,這條連接依然可以重用,因此,在你下一次(4小時(shí) 之內(nèi))登錄服務(wù)器時(shí),你會(huì)發(fā)現(xiàn)連接以閃電般的速度建立完成,這個(gè)選項(xiàng)對(duì)于通過(guò)scp拷貝多個(gè)文件提速尤其明顯,因?yàn)槟悴辉谛枰獮槊總€(gè)文件做單獨(dú)的認(rèn)證了。

3. 別再輸入密碼

如果你還在通過(guò)密碼方式登錄SSH,那么你或許應(yīng)該試試SSH Keys,首先使用OpenSSH為自己聲稱一對(duì)密鑰:

代碼如下:

$ ssh-keygen

跟隨指示,完成之后,你應(yīng)該可以在你的.ssh目錄下看到兩個(gè)文件,id_rsa就是你的私鑰,而id_ras.pub則是你的公鑰,現(xiàn)在你需要將你的公鑰拷貝到服務(wù)器上,如果你的系統(tǒng)有ssh-copy-id命令,拷貝會(huì)很簡(jiǎn)單:

代碼如下:

$ ssh-copy-id smylers@compo.example.org

否則,你需要手動(dòng)將你的公鑰拷貝到服務(wù)器上的~/.ssh/authorized_keys文件中:

代碼如下:

$ < ~/.ssh/id_rsa.pub ssh clegg.example.org 'mkdir -p .ssh; cat >> .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys'

現(xiàn)在試試重新連接到SSH服務(wù)器,或是拷貝文件,是不是已經(jīng)不需要再輸入密碼了?

為Putty配置SSH Key

Putty也可以使用SSH Key,從Putty網(wǎng)站下載PuttyGen和Pageant,然后使用PuttyGen生成你的密鑰,將公鑰拷貝到服務(wù)器的'.ssh/authorized_keys'目錄,然后運(yùn)行Pageant,導(dǎo)入你的私鑰,讓它在后臺(tái)運(yùn)行,險(xiǎn)隘你就可以使用Putty通過(guò)公鑰直接登錄服務(wù)器了,你可以在Putty手冊(cè)的第8,9章了解關(guān)于這一特性的詳細(xì)介紹。

4. 連接中轉(zhuǎn)

有時(shí)候你可能需要從一個(gè)服務(wù)器連接另外一個(gè)服務(wù)器,比如在兩個(gè)服務(wù)器之間直接傳輸數(shù)據(jù),而不用通過(guò)本地電腦中轉(zhuǎn):

代碼如下:

www1 $ scp -pr templates www2:$PWD

(順便說(shuō)一下,當(dāng)你需要在兩臺(tái)服務(wù)器間拷貝文件時(shí),$PWD變量時(shí)非常有用的),因?yàn)榧词鼓阋呀?jīng)在兩臺(tái)服務(wù)器上添加了你本地電腦的公鑰,scp默認(rèn) 仍然會(huì)提示你輸入密碼:這是因?yàn)槟阌脕?lái)作為跳板的那臺(tái)服務(wù)器上并沒(méi)有你的私鑰,所以,第二胎服務(wù)器會(huì)拒絕你的公鑰,但是一定不要通過(guò)將你的私鑰拷貝到中轉(zhuǎn) 服務(wù)器上來(lái)解決這個(gè)問(wèn)題,你可以使用agent forwarding來(lái)解決這個(gè)問(wèn)題,只要在你的.ssh/config文件中加入下面這行代碼就可以了:

代碼如下:

ForwardAgent yes

或者是在Putty中勾上“Allow agent forwarding”選項(xiàng),現(xiàn)在你的本地SSH就變成了第一臺(tái)服務(wù)器的SSH代理,從第一臺(tái)服務(wù)器在連接其它服務(wù)器就變和和在你本地一樣簡(jiǎn)單,注意,如果要開啟這個(gè)選項(xiàng),前提是這個(gè)中間服務(wù)器值得你信任。

5. 省略主機(jī)名

輸入服務(wù)器的完整主機(jī)名來(lái)建立一個(gè)新的SSH連接實(shí)在是太乏味無(wú)聊了,尤其是當(dāng)你有一組擁有相同域名但是子域名不同的服務(wù)器需要管理時(shí),比如下面這樣:

代碼如下:

* www1.example.com
* www2.example.com
* mail.example.com
* intranet.internal.example.com
* backup.internal.example.com
* dev.internal.example.com

或許你的網(wǎng)絡(luò)已經(jīng)配置了可以直接使用短域名,比如intranet,但是如果你的網(wǎng)絡(luò)不支持,實(shí)際上你可以自己搞定這個(gè)問(wèn)題,而不用求助網(wǎng)絡(luò)管理員。

解決辦法根據(jù)你用的操作系統(tǒng)而略有差異,下面是我的Ubuntu系統(tǒng)的配置:

代碼如下:

prepend domain-search "internal.example.com", "example.com";

然后你需要重啟網(wǎng)絡(luò):

代碼如下:

$ sudo restart network-manager

不同的系統(tǒng),這兩條命令可能會(huì)略有差異。

6. 主機(jī)別名

你也可以在你的SSH配置中直接定義主機(jī)別名,就像下面這樣:

代碼如下:

Host dev
   HostName dev.internal.example.com

你還可以使用通配符來(lái)進(jìn)行分組:

代碼如下:

Host dev intranet backup
   HostName %h.internal.example.com</p> <p>Host www* mail
   HostName %h.example.com

在Putty中你可以為每個(gè)主機(jī)名保存單獨(dú)的session,然后雙擊建立連接(但是它可能沒(méi)辦法支持通配符)。

7. 省去用戶名

如果你在遠(yuǎn)程服務(wù)器上的用戶名和你本地的用戶名不同,你同樣可以在SSH配置中進(jìn)行設(shè)置:

代碼如下:

Host www* mail
&nb
sp;  HostName %h.example.com
   User simon

現(xiàn)在就算我的本地用戶名是 smylers,我仍然可以這樣連接我的服務(wù)器:

代碼如下:

$ ssh www2

SSH會(huì)使用simon賬戶連接你的服務(wù)器,同樣,Putty可以保存這個(gè)信息在你的session中。

8. 在服務(wù)器間跳轉(zhuǎn)

有些時(shí)候,你可能沒(méi)法直接連接到某臺(tái)服務(wù)器,而需要使用一臺(tái)中間服務(wù)器進(jìn)行中轉(zhuǎn),這個(gè)過(guò)程也可以自動(dòng)化。首先確保你已經(jīng)為服務(wù)器配置了公鑰訪問(wèn),并開啟了agent forwarding,現(xiàn)在你就可以通過(guò)2條命令來(lái)連接目標(biāo)服務(wù)器,不會(huì)有任何提示輸入:

代碼如下:

$ ssh gateway
gateway $ ssh db

然后在你的本地SSH配置中,添加下面這條配置:

代碼如下:

Host db
   HostName db.internal.example.com
   ProxyCommand ssh gateway netcat -q 600 %h %p

現(xiàn)在你就可以通過(guò)一條命令來(lái)直接連接目標(biāo)服務(wù)器了:

代碼如下:

$ ssh db

這里你可能會(huì)需要等待長(zhǎng)一點(diǎn)的時(shí)間,因?yàn)镾SH需要進(jìn)行兩次認(rèn)證,注意netcat也有可能被寫成nc或者ncat或者前面還需要加上g,你需要檢查你的中間服務(wù)器來(lái)確定實(shí)際的參數(shù)。

9.突破網(wǎng)絡(luò)封鎖

有些時(shí)候,你使用的網(wǎng)絡(luò)可能只開放了80端口,或者它們封鎖了SSH端口(默認(rèn)的22端口),這種情況下,你可以通過(guò)配置SSH服務(wù)器在80或者443端口進(jìn)行監(jiān)聽來(lái)突,破,封,鎖,只需要編輯你的服務(wù)器的/etc/ssh/sshd_config文件:

代碼如下:

Port 443

然后重啟SSH服務(wù)器:

代碼如下:

$ sudo reload ssh

當(dāng)然這樣做的前提是你的服務(wù)器沒(méi)有使用HTTS服務(wù),但是實(shí)際上你只需要設(shè)置一臺(tái)服務(wù)器使用https端口就夠了,你但你可以訪問(wèn)這臺(tái)服務(wù)器,你就 可以使用我們前面提到的技術(shù)利用它作為跳板來(lái)訪問(wèn)其它服務(wù)器,但是記住,你需要提前配置好這臺(tái)服務(wù)器(現(xiàn)在怎么樣?),這樣萬(wàn)一當(dāng)你身處一個(gè)只能訪問(wèn) Web的網(wǎng)絡(luò)環(huán)境時(shí),就可以省掉打電話讓其他人幫你配置中間服務(wù)器的麻煩了。

10. 穿越Web代理

有些時(shí)候,你所在的網(wǎng)絡(luò)不止封鎖SSH端口,它們有可能更進(jìn)一步,只讓你通過(guò)Web代理來(lái)訪問(wèn)網(wǎng)絡(luò),幸運(yùn)的是我們有一個(gè)叫做Corkscrew的程序可以通過(guò)Web代理在發(fā)送SSH數(shù)據(jù)。Corkscrew的使用非常簡(jiǎn)單,一般我都是在需要時(shí)搜索,然后直接下載,跟隨網(wǎng)站上的指示,然后就搞定了,一般你需要這樣一條配置:

代碼如下:

ProxyCommand corkscrew proxy.example.org 8080 %h %p

11. 遠(yuǎn)程GUI

有時(shí)候通過(guò)本地的GUI程序來(lái)訪問(wèn)遠(yuǎn)程服務(wù)器的文件會(huì)非常有用,比如,編輯一副圖片,或者查看一個(gè)PDF文件,或者只是簡(jiǎn)單的通過(guò)一個(gè)非命令行的編 輯器來(lái)修改代碼,我發(fā)現(xiàn)GVim要比終端里的Vim更有用,因?yàn)槲铱梢酝ㄟ^(guò)gvimopens打開一個(gè)新窗口來(lái)編輯文件,而用當(dāng)前的SSH窗口繼續(xù)執(zhí)行其 它操作,不要要這樣做,你需要先在你的SSH配置中開啟一個(gè)叫做X forwarding的選項(xiàng):

代碼如下:

ForwardX11 yes

這個(gè)選項(xiàng)需要服務(wù)器配置才能起作用,服務(wù)器也需要開啟X forwarding,你可以在服務(wù)器的/etc/ssh/sshd_config中添加下面這個(gè)命令:

代碼如下:

X11Forwarding yes

同時(shí)你還需要確保安裝了xauth,編輯器,圖片查看器以及其它的你需要運(yùn)行的圖形化程序,這種方式只有在支持本地X服務(wù)器的操作提供才可以工 作,mac和Windows上都有免費(fèi)的X Server,你可能需要花些時(shí)間配置它們,相比之下,切換到Linux相對(duì)會(huì)更容易一下。

12.本地操作遠(yuǎn)程文件

另一種讓遠(yuǎn)程GUI程序顯示在本地的替代方案就是讓本地的GUI程序可以直接操作遠(yuǎn)程文件,你可以通過(guò)SSHFS來(lái)實(shí)現(xiàn),只需要?jiǎng)?chuàng)建一個(gè)空目錄,然后使用SSHFS將一個(gè)遠(yuǎn)程目錄mount到這個(gè)目錄就可以了:

代碼如下:

$ mkdir gallery_src
$ sshfs dev:projects/gallery/src gallery_src
$ cd gallery_src
$ ls

現(xiàn)在你就可以使用任何你喜歡的本地程序來(lái)便捷這個(gè)目錄中的文件了,它們看起來(lái)是在你的本地,但其實(shí)時(shí)遠(yuǎn)程服務(wù)器上的文件,你可以使用fusermount命令來(lái)unmount這些文件,不要擔(dān)心記不住,它們就在sshfs手冊(cè)的頂上:

代碼如下:

$ cd ..
$ fusermount -u gallery_src

SSHFS可以在Linux和OSX上工作,Windows用戶我目前還沒(méi)找到什么好辦法。

13. 通過(guò)Vim訪問(wèn)遠(yuǎn)程文件

Vim有一個(gè)內(nèi)置的功能可以直接編輯遠(yuǎn)程文件,需要借助SCP URL:

代碼如下:

$ gvim scp://dev/projects/gallery/src/templates/search.html.tt

這中方式明顯不如SSHFS靈活,但是如果你只需要對(duì)遠(yuǎn)程服務(wù)器的1,2個(gè)文件進(jìn)行編輯時(shí),這條命令就要更靈活一些了,并且可以在Windows上你也可以這樣做:

代碼如下:

:help netrw-problems

14. 使用本地App連接遠(yuǎn)程服務(wù)器

有時(shí)可能有些服務(wù),比如數(shù)據(jù)庫(kù)或是Web服務(wù)器,它們運(yùn)行在遠(yuǎn)程服務(wù)器上,但是如果有用方式可以直接從本地程序連接它們,那會(huì)非常有用,要做到這一 點(diǎn),你需要用到端口轉(zhuǎn)發(fā)(port forwarding),舉個(gè)例子,如果你的服務(wù)器運(yùn)行Postgres(并且只允許本地訪問(wèn)),那么你就可以在你的SSH配置中加入:

代碼如下:

Host db
   LocalForward 5433 localhost:5432

現(xiàn)在當(dāng)你連接你的SSH服務(wù)器時(shí),它會(huì)在你本地電腦打開一個(gè)5433端口(我隨便挑的),并將所有發(fā)送到這個(gè)端口的數(shù)據(jù)轉(zhuǎn)發(fā)到服務(wù)器的5432端口 (Postgres的默認(rèn)端口),然后,只要你和服務(wù)器建立了連接,你就可以通過(guò)5433端口來(lái)訪問(wèn)服務(wù)器的Postgres了。

代碼如下:

$ ssh db

現(xiàn)在打開另外一個(gè)窗口,你就可以通過(guò)下面這條命令在本地連接你的Postgres數(shù)據(jù)庫(kù)了:

代碼如下:

$ psql -h localhost -p 5443 orders

如果你想要使用服務(wù)器不支持的圖形化Postgres客戶端時(shí),這條命令會(huì)顯得尤其有用:

代碼如下:

$ pgadmin3 &

或者你有一個(gè)后臺(tái)的Web服務(wù)器,你不希望直接通過(guò)Internet訪問(wèn)它,你也可以通過(guò)端口轉(zhuǎn)發(fā)來(lái)訪問(wèn)它:

代碼如下:

Host api
   LocalForward 8080 localhost:80

現(xiàn)在連接到服務(wù)器:

代碼如下:

$ ssh api

然后將瀏覽器指向你選擇的端口號(hào):

代碼如下:

$ firefox http://localhost:8080/

15. 減少延遲

如果每次連接服務(wù)器都意味著你需要等待幾十秒而無(wú)所事事,那么你或許應(yīng)該試試在你的SSH配置中加入下面這條:

代碼如下:

GSSAPIAuthentication no

如果這條命令有效的話,你應(yīng)該通知你的系統(tǒng)管理員讓他在服務(wù)器上禁用這個(gè)選項(xiàng),這樣其他人就不用再分別添加這條配置到它們的本地配置了。

16. 加速連接

如果你確保你和某個(gè)服務(wù)器之間的連接是安全的(比如通過(guò)公司內(nèi)網(wǎng)連接),那么你就可以通過(guò)選擇arcfourencryption算法來(lái)讓數(shù)據(jù)傳輸更快一些:

代碼如下:

Host dev
   Ciphers arcfour

注意這個(gè)加速是以犧牲數(shù)據(jù)的“加密"性為代價(jià)的,所以如果你連接的是位于網(wǎng)上的服務(wù)器,千萬(wàn)不要打開這個(gè)選項(xiàng),并且確保你是通過(guò)VPN建立的連接。

到此,相信大家對(duì)“有哪些使用SSH的技巧”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

ssh
AI