引子
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的好處是:
- 它是一個字符終端軟件垒手,不需要任何GUI的支持,通用性更好
- 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
根據(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)系坊秸,從而免密碼登錄。
- 首先澎怒,在本地機(jī)器上使用ssh-keygen產(chǎn)生公鑰私鑰對
ssh-keygen
一路回車即可褒搔,會在~/.ssh
目錄下生成公鑰私鑰對。此命令只需執(zhí)行一次即可喷面。
- 然后星瘾,用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 demouser
或sftp 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/