如何優(yōu)雅的使用SSH

引子

SSH連接是我們與服務(wù)器交互的主要手段饥侵,每個程序員每天都會用到,就像喝白開水一樣普通抵蚊。
就是這樣一個簡單而又高頻的動作,如果配置得當(dāng),或許能極大的提高我們工作的幸福感吧贞绳。

前不久一個同事剛從Windows切換到macOS平臺谷醉,問我SecureCRT有沒有mac下的版本,我說即然都用上了基于BSD的mac了冈闭,應(yīng)該不再需要SecureCRT這樣的東西了才對俱尼,SSH如果配置好了,體驗應(yīng)該完爆Windows萎攒。于是就有了寫下這篇文章的念頭遇八,填一下之前的坑。

選擇終端GUI工具

首先第一步是選擇一個好用的GUI工具耍休,畢竟大多數(shù)人都是在DE下工作刃永,極少人會喜歡工作在tty1這樣的文字介面下。

Windows平臺

Windows平臺下的工具比較多羊精,下面撿幾個主要的來說一說優(yōu)缺點(diǎn):

  • SecureCRT - 老牌的商業(yè)軟件降宅,同時也提供Mac和Linux版本,功能強(qiáng)大掀宋,費(fèi)用昂貴戚丸,但貌似身邊所有人都在用盜版,PASS
  • Xshell - 有免費(fèi)的License裸违,但只允許非商業(yè)場景下使用掖桦,這個也PASS
  • Putty - 好吧,只能是它了供汛,免費(fèi)枪汪,功能簡單,但是也足夠用了
  • Cygwin - 差點(diǎn)把這個忘了怔昨,嚴(yán)格來說它并不僅僅是一個SSH工具雀久,也值得推薦

macOS平臺

macOS平臺的終端工具比較好選,公認(rèn)的只有iTerm2一個:

  • 原生Terminal - 開箱即用趁舀,功能上也不過不失赖捌,但拋棄它,只是因為有更好的iTerm2矮烹。越庇。。
  • iTerm2 - 免費(fèi)奉狈,支持眾多的自定義選項卤唉,可以完全替代原生Terminal,沒得選仁期,就是它了

Ubuntu平臺

Ubuntu默認(rèn)自帶一個gnome-terminal桑驱,雖然不像iTerm2那樣討喜竭恬,但勝在簡潔,個人認(rèn)為是最優(yōu)的選擇吧:

  • Terminator - 支持窗口拆分熬的,但界面丑萍聊,不能忍,PASS
  • Guake - 支持下拉式的呼出悦析,但界面更丑寿桨,PASS
  • 原生Terminal - 界面簡潔,功能夠用强戴,最終還是用回了它

iTerm2使用簡介

Putty和gnome-terminal的配置都比較簡單亭螟,記住幾個快捷鍵就可以了,macOS下的iTerm2配置和使用都要麻煩些骑歹,這里單獨(dú)拿出來寫一下预烙。

配置呼出快捷鍵

使用Cmd+,打開設(shè)置界面,切換到Keys一欄


在左下方可以設(shè)置 呼出/隱藏 iTerm2的快捷鍵道媚,這里我設(shè)置成了Cmd+ESC扁掸,瞬間呼出,比Alfred/Spotlight還要方便最域。
另外還可以在Profile一欄中修改窗口為全屏+半透明谴分,完美。

選中即復(fù)制

使用鼠標(biāo)選中一段文字后镀脂,默認(rèn)就已經(jīng)復(fù)制到剪貼板了牺蹄,直接用Cmd+V粘帖即可。

Profile設(shè)置

使用Cmd+,打開設(shè)置界面薄翅,切換到Profile一欄
在這里可以配置遠(yuǎn)程服務(wù)器的連接參數(shù)

配合sshpass這個命令沙兰,可以實現(xiàn)類似SecureCRT的Session管理的功能。
注意翘魄,sshpass直接使用明文保存密碼(SecureCRT是加密后存在本地)鼎天,已經(jīng)不推薦使用,下面會介紹一個更好的方式暑竟。

分屏

分屏功能相當(dāng)好用斋射,例如我們可以在屏幕左側(cè)查看日志,右側(cè)進(jìn)行常規(guī)操作
Cmd+D 垂直分割
Cmd+Shift+D水平分割

自動完成

輸入前幾個關(guān)鍵字后光羞,按Cmd+;绩鸣,會有一個自動補(bǔ)全功能

命令歷史記錄

使用Cmd+shift+H可以打開命令歷史記錄

使用Tmux窗口管理工具

GUI工具有了怀大,我們還缺一個通用的窗口管理工具--Tmux纱兑。

Tmux是一個終端復(fù)用器,它可以激活多個終端或窗口, 還可以將屏幕水平或縱向切分成多個窗口化借。
類似于screen潜慎,它可以關(guān)閉窗口將程序放在后臺運(yùn)行,需要的時候再重新連接。

其實iTerm2等GUI工具也可以實現(xiàn)類似的功能铐炫,但Tmux的好處是:

  1. 它是一個字符終端軟件垒手,不需要任何GUI的支持,通用性更好
  2. tmux可以 保持多個會話 倒信,只要不關(guān)機(jī)科贬,就可以隨時恢復(fù)Session

macOS下的安裝

brew install tmux

Ubuntu下的安裝

sudo apt-get install tmux

tmux的主要元素分為三層:

  • Session 一組窗口的集合,通常用來概括同一個任務(wù)
  • Window 單個可見窗口鳖悠,和ITerm2中的Tab類似
  • Pane 窗格榜掌,被劃分成小塊的窗口

tmux默認(rèn)的前置操作是CTRL+b。例如乘综,我們想要新建一個窗體憎账,就需要先在鍵盤上摁下CTRL+b,松開后再摁下n鍵卡辰。
下面所有的prefix均代表CTRL+b

  • 查看/切換session prefix s
  • 離開Session prefix d
  • 重命名當(dāng)前Session prefix $
  • 新建窗口 prefix c
  • 切換到上一個活動的窗口 prefix space
  • 關(guān)閉一個窗口 prefix &
  • 使用窗口號切換 prefix 窗口號
  • 切換到下一個窗格 prefix o
  • 查看所有窗格的編號 prefix q
  • 垂直拆分出一個新窗格 prefix “
  • 水平拆分出一個新窗格 prefix %
  • 暫時把一個窗體放到最大 prefix z

使用oh my zsh

工具已經(jīng)齊全胞皱,但攘外必先安內(nèi),在連接遠(yuǎn)程服務(wù)器之前九妈,我們先優(yōu)化一下本機(jī)的Shell反砌。

Linux系統(tǒng)中已經(jīng)內(nèi)置了幾種shell,一般默認(rèn)的是bash

zsh比bash更加好用萌朱,且完全兼容bash于颖,但它配置繁瑣。幸虧有了oh-my-zsh嚷兔,讓zsh的配置難度大大降低森渐。

首先安裝一下zsh,mac系統(tǒng)無需安裝冒晰,Ubuntu可以通過apt安裝

sudo apt install zsh

這里是oh my zsh官網(wǎng)

根據(jù)官網(wǎng)的介紹同衣,安裝相當(dāng)?shù)暮唵危恍枰恍忻罴纯?/p>

$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

zsh的配置文件是~/.zshrc壶运,各項配置都有對應(yīng)的注釋耐齐,非常清晰,在這里可以修改主題蒋情,其實默認(rèn)的已經(jīng)很好看了

以下是zsh的一些使用技巧埠况,請盡量記住,因為都很常用:

  • 連按兩次Tab會列出所有的補(bǔ)全列表并直接開始選擇棵癣,補(bǔ)全項可以使用 ctrl+n/p/f/b上下左右切換
  • 命令選項補(bǔ)全辕翰。在zsh中只需要鍵入 tar -<tab> 就會列出所有的選項和幫助說明
  • 命令參數(shù)補(bǔ)全。鍵入 kill <tab> 就會列出所有的進(jìn)程名和對應(yīng)的進(jìn)程號
  • 更智能的歷史命令狈谊。在用或者方向上鍵查找歷史命令時喜命,zsh支持限制查找沟沙。比如,輸入ls,然后再按方向上鍵壁榕,則只會查找用過的ls命令矛紫。而此時使用則會仍然按之前的方式查找,忽略 ls
  • 智能跳轉(zhuǎn)牌里,安裝了 autojump 之后颊咬,zsh 會自動記錄你訪問過的目錄,通過 j 目錄名 可以直接進(jìn)行目錄跳轉(zhuǎn)牡辽,而且目錄名支持模糊匹配和自動補(bǔ)全贪染,例如你訪問過 hadoop-1.0.0 目錄,輸入j hado 即可正確跳轉(zhuǎn)催享。j --stat 可以看你的歷史路徑庫杭隙。
  • 目錄瀏覽和跳轉(zhuǎn):輸入 d,即可列出你在這個會話里訪問的目錄列表因妙,輸入列表前的序號痰憎,即可直接跳轉(zhuǎn)。
  • 在當(dāng)前目錄下輸入 ..... 攀涵,或直接輸入當(dāng)前目錄名都可以跳轉(zhuǎn)铣耘,你甚至不再需要輸入 cd 命令了。在你知道路徑的情況下以故,比如 /usr/local/bin 你可以輸入 cd /u/l/b 然后按進(jìn)行補(bǔ)全快速輸入
  • 通配符搜索:ls -l **/*.sh蜗细,可以遞歸顯示當(dāng)前目錄下的 shell 文件,文件少時可以代替 find怒详。使用 **/ 來遞歸搜索
  • 擴(kuò)展環(huán)境變量炉媒,輸入環(huán)境變量然后按 就可以轉(zhuǎn)換成表達(dá)的值

使用config記錄遠(yuǎn)程連接

現(xiàn)在開始,我們再看一下如何連接遠(yuǎn)程服務(wù)器昆烁。

如果要管理幾十臺至上百臺的主機(jī)吊骤,那么有沒有什么方法能實現(xiàn)類似SecureCRT中Session管理那樣的功能呢?

最簡單的是使用iTerm2中的profile功能静尼,它可以配置多臺主機(jī)的連接白粉,并可以使用tag進(jìn)行歸類。
但這種方式首先太依賴于GUI工具鼠渺,離開了iTerm2就完全用不了鸭巴。
其次是通用性不夠好,配置文件不能跨平臺拦盹,我們辛辛苦苦在Mac上配好了一份主機(jī)清單鹃祖,但回家扔到Ubuntu下就沒法用了。

有沒有一種更為通用的方法呢掌敬?答案是直接使用openssh自帶的config功能

配置文件的路徑是:~/.ssh/config惯豆,如果不存在池磁,可以新建一個

內(nèi)容非常簡單

Host demohost
  HostName 192.168.1.1
  User username
  Port 10022

第一行Host后面奔害,可以為這個連接起一個簡單的名字
后面幾行記得縮進(jìn)楷兽,HostName后面是IP地址,User后面是用戶名华临,這兩項是必填的芯杀。如果端口不是標(biāo)準(zhǔn)的22,還可以用Port指定端口雅潭。

配置好后揭厚,我們只需要輸入ssh demohost,即可快速打開SSH連接了扶供。

如果記不清連接名也沒有關(guān)系筛圆,利用zsh的自動補(bǔ)全功能,輸入ssh 關(guān)鍵字椿浓,再按一下TAB鍵太援,會列出所有包含關(guān)鍵字的連接,使用方向鍵選擇后扳碍,回車確認(rèn)即可提岔。

使用ssh-copy-id免密碼登錄

接著再看一下,如何實現(xiàn)免密碼登錄遠(yuǎn)程主機(jī)笋敞。

之前我們提到過使用sshpass這個工具碱蒙,可以直接將密碼寫進(jìn)命令行中,從而實現(xiàn)非交互式的免密碼登錄

sshpass -p password ssh demouser@92.168.1.1

但這種方式使用明文保存密碼夯巷,非常不安全赛惩,不建議使用。

其實還有一種更好更直接的方式趁餐,那就是使用ssh-copy-id建立ssh信任關(guān)系坊秸,從而免密碼登錄。

  1. 首先澎怒,在本地機(jī)器上使用ssh-keygen產(chǎn)生公鑰私鑰對
ssh-keygen

一路回車即可褒搔,會在~/.ssh目錄下生成公鑰私鑰對。此命令只需執(zhí)行一次即可喷面。

  1. 然后星瘾,用ssh-copy-id將公鑰復(fù)制到遠(yuǎn)程機(jī)器中
ssh-copy-id -i demouser@192.168.1.1

按提示輸入一次密碼,ssh-copy-id就會自動將剛才生成的公鑰id_rsa.pub追加到遠(yuǎn)程主機(jī)的~/.ssh/authorized_keys后面了惧辈,以后的 ssh 以及 sftp 連接琳状,都不用輸入密碼了。

至此盒齿,我們只要輸入ssh demousersftp demouser念逞,回車困食,就可以直接登錄遠(yuǎn)程主機(jī)了。

安利一個小工具

最后的最后翎承,再介紹一個很惡搞硕盹,但相當(dāng)有用的小工具,thefuck GitHub頁面

當(dāng)我們敲錯了命令叨咖,比如忘記加sudo時瘩例,只需要輸入fuck并大力敲下回車,它就會非常智能的幫助我們更正了甸各,非常有趣垛贤。

? apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

? fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...

參考文檔

http://cenalulu.github.io/linux/tmux/
http://harttle.com/2015/11/06/tmux-startup.html
http://wulfric.me/2015/08/iterm2/
http://yijiebuyi.com/blog/e310fc437f32006eb6aa42cad1783587.html
http://wdxtub.com/2016/02/18/oh-my-zsh/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趣倾,隨后出現(xiàn)的幾起案子聘惦,更是在濱河造成了極大的恐慌,老刑警劉巖儒恋,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善绎,死亡現(xiàn)場離奇詭異,居然都是意外死亡碧浊,警方通過查閱死者的電腦和手機(jī)涂邀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箱锐,“玉大人比勉,你說我怎么就攤上這事【灾梗” “怎么了浩聋?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長臊恋。 經(jīng)常有香客問我衣洁,道長,這世上最難降的妖魔是什么抖仅? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任坊夫,我火速辦了婚禮,結(jié)果婚禮上撤卢,老公的妹妹穿的比我還像新娘环凿。我一直安慰自己,他們只是感情好放吩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布智听。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪到推。 梳的紋絲不亂的頭發(fā)上考赛,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音莉测,去河邊找鬼颜骤。 笑死,一個胖子當(dāng)著我的面吹牛悔雹,可吹牛的內(nèi)容都是我干的复哆。 我是一名探鬼主播欣喧,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼腌零,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唆阿?” 一聲冷哼從身側(cè)響起益涧,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驯鳖,沒想到半個月后闲询,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浅辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年扭弧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记舆。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸽捻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泽腮,到底是詐尸還是另有隱情御蒲,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布诊赊,位于F島的核電站厚满,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碧磅。R本人自食惡果不足惜碘箍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲸郊。 院中可真熱鬧丰榴,春花似錦、人聲如沸严望。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽像吻。三九已至峻黍,卻和暖如春复隆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姆涩。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工挽拂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骨饿。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓亏栈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宏赘。 傳聞我的和親對象是個殘疾皇子绒北,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Linux命令學(xué)習(xí) 記錄小白學(xué)習(xí)Linux的過程。 常用命令 man命令 常用工具命令 man命令是Linux下的...
    吃蘑菇De大灰狼閱讀 2,727評論 1 15
  • 安裝iterm2 說明:mac系統(tǒng)上替代終端的命令行工具 安裝方法:直接從官網(wǎng)下載安裝即可察署,下載地址 安裝brew...
    欒呱呱閱讀 2,551評論 1 6
  • iTerm2介紹 本文初衷 整理自己腦袋中闷游、收藏中的那些資料,來一次清空贴汪,讓自己重新開始脐往。 幫助 Mac 后來者,...
    UPUPMO閱讀 11,018評論 6 88
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理扳埂,服務(wù)發(fā)現(xiàn)业簿,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 因為現(xiàn)在不僅僅是國內(nèi)對直播這塊流涎阳懂,國外梅尤,例如:臉書,它的CEO還明確將直播作為重點(diǎn)希太】巳模可見直播是多么的熱門呢? 我...
    光明程輝閱讀 1,765評論 1 6