Ubuntu下使用OpenSSH的八個(gè)小竅門
來到ubuntu下以后,以前在windows下積累的“高效”辦公的習(xí)慣都要重新改寫。首當(dāng)其沖的就是服務(wù)器的遠(yuǎn)程管理工作。今天的主角就是會(huì)伴隨openssh-server一同發(fā)布的openssh-client。而且默認(rèn)不安裝openssh-server的情況下,大多的發(fā)行版也會(huì)默認(rèn)集成這個(gè)東東。筆者以前在遠(yuǎn)程登陸到linux系統(tǒng)以后也會(huì)經(jīng)常用里面的ssh命令再連到其它的機(jī)器,但是今天所提到的大部分的東西都是在筆者使用ubuntu以后才慢慢知道的。這個(gè)樸實(shí)無華的小東東究竟有什么樣的能量呢?下面就由筆者來分享這次的一個(gè)個(gè)小甜點(diǎn):
1.私key登陸
無論你使用哪個(gè)客戶端軟件都會(huì)有設(shè)置使用key的選項(xiàng),ssh命令也不例外。默認(rèn)情況下,ssh會(huì)讀取用戶宿主目錄的.ssh里的id_rsa這個(gè)文件。這里有個(gè)小插曲:筆者原來的key是用secureCRT生成的。保存的時(shí)候會(huì)提示是用secureCRT私有格式還是openssh格式。筆者當(dāng)時(shí)用的secureCRT格式,放到這個(gè)目錄以后,你看那個(gè)著急啊,死活不好使。后來又用secureCRT重新保存成openssh格式才可以(重新保存不是重新生成喲,想想后面有那么多服務(wù)器要一個(gè)一個(gè)重新放上去就會(huì)沒有重新生成的欲望)。還有一點(diǎn)要注意的是,一定要是id_rsa這個(gè)文件名喲,不然的話急死你也不知道啥原因(當(dāng)然了后面學(xué)習(xí)到使用配置文件的時(shí)候,你會(huì)知道還有identity和id_dsa,到時(shí)候想用啥名隨心所意)。再有就是這個(gè)文件的權(quán)限是600,不然的話ssh也不會(huì)買帳的喲。
2.指定用戶名
每個(gè)人都會(huì)有自己喜歡的用戶名,像筆者就喜歡用rainbird,所以筆者登陸系統(tǒng)的時(shí)候用戶名也是rainbird。而你連接的服務(wù)器不會(huì)判斷你當(dāng)前的用戶名,然后給你建立一個(gè)帳號(hào)喲。默認(rèn)使用“ssh ip”的時(shí)候。ssh會(huì)判斷你當(dāng)前是否有配置文件指定默認(rèn)的用戶名,沒有的話再判斷你在命令里有沒有使用ssh -l rainbird ip或者ssh rainbird@ip這樣的格式,沒有的話,它就會(huì)默認(rèn)取你當(dāng)前系統(tǒng)登陸的用戶名。來連接遠(yuǎn)程的系統(tǒng)。如果你每次連接的用戶要用的用戶名都一樣而又不是rainbird比如說root的話,每次都要輸入-l或者user@ip這樣的形式是不是很煩呢?反正輸入的東西越多效率就越低。前面有提到ssh會(huì)先判斷是否有配置文件。
經(jīng)過筆者的學(xué)習(xí)發(fā)現(xiàn):ssh會(huì)讀取兩個(gè)配置文件:一個(gè)是~/.ssh/config,沒有的話就會(huì)去讀/etc/ssh/ssh_config。呵呵,這也是linux的工作理念:每個(gè)用戶都會(huì)有自己個(gè)性的配置文件,所以用戶默認(rèn)會(huì)使用統(tǒng)一的配置文件。抱著試試看的想法,筆者vi ~/.ssh/config,寫入U(xiǎn)ser竟發(fā)現(xiàn)講法高亮了,看來就是它,于是寫入:
User root
保存退出以后,再ssh ip的時(shí)候,竟發(fā)現(xiàn)真得以root@ip的形式連接了:
[rainbird@rainbird ~]$ssh 192.168.5.18
root@192.168.5.18's password:
3.指定連接的端口和密碼
在設(shè)定了默認(rèn)連接的用戶名以后,筆者算是嘗到了甜頭。于是開始仔細(xì)研究/etc/ssh/ssh_config這個(gè)配置文件。筆者以前也只是知道有這么個(gè)文件,還真沒仔細(xì)的看過。這一研究不要緊,許多問題都迎刃而解。***引起筆者注意的兩行是:
# Port 22
# Protocol 1,2
這兩行的意思就是說,默認(rèn)連接的端口是22,默認(rèn)連接使用的ssh協(xié)議1,2都可以。直接打開~/.ssh/config把這兩行也加去:
Port 1222
Protocol 2
是不是又省去了很多東西呢?
4.添加便于訪問的主機(jī)名
這點(diǎn)嚴(yán)格來說算不上是ssh命令獨(dú)有的。無論使用哪種客戶端軟件都會(huì)有保存會(huì)話的功能,但是ssh命令有沒有讀取默認(rèn)會(huì)話配置的功能呢?筆者也想了很長(zhǎng)時(shí)間,但是沒找到解決辦法。其實(shí)筆者就是覺得每次都要ssh xxx.xxx.xxx.xxx有點(diǎn)太累,主要是筆者對(duì)數(shù)字天生不感冒。咋辦呢?老大說,你直接用域名不就得了?嗯?域名好記,但是好記是好記,也不短啊,咋辦呢?直接寫hosts得了!因?yàn)橛蛎某霈F(xiàn)是因?yàn)閔osts不夠用了。在hosts夠用的情況下,為啥不用hosts呢?再說不但一勞永逸,還節(jié)省了解析時(shí)間,一舉兩得。于是乎:sudo vi /etc/hosts
xxx.xxx.xxx.xxx web
以后再訪問web的時(shí)候,直接ssh web。嗯,有點(diǎn)符合linux的簡(jiǎn)潔高效的思想了。
5.ssh 中文亂碼問題
世界真美好。豐富多彩,五彩繽紛。linux下正常顯示中文的問題,一直是筆者最關(guān)心的問題。當(dāng)使用ssh登陸到中文環(huán)境的linux服務(wù)器上時(shí),中文還是亂碼。咋辦呢?這天生一對(duì)的東西,能不能解決這個(gè)問題呢?答案是肯定的。在/etc/ssh/ssh_config有這么一句話:
SendEnv LANG LC_ALL
這個(gè)選項(xiàng)默認(rèn)是打開的,意思是發(fā)送系統(tǒng)語言環(huán)境。網(wǎng)上有說可以寫成SendEnv LANG=en.US.UTF-8 LC_ALL=en.US.UTF-8。但是根據(jù)筆者的理解:當(dāng)LC_ALL設(shè)置的時(shí)候,LANG就算設(shè)置了也要服從LC_ALL的,所以筆者直接在~/.ssh/config里加入了這句:
SendEnv LANG LC_ALL=en.US.UTF-8
哈哈,中文就正確顯示了。生活真美好!
6.ssh客戶端啟用ssh key轉(zhuǎn)發(fā)
Linux系統(tǒng)中有一個(gè)自動(dòng)轉(zhuǎn)發(fā)key的功能,在遠(yuǎn)程到一臺(tái)linux再ssh其它機(jī)器的時(shí)候可以用你本機(jī)的私key自動(dòng)去驗(yàn)證,極大的提高的工作效率和安全性。這個(gè)功能用普通的ssh命令可不可以實(shí)現(xiàn)呢?答案還是那么的肯定!但是要分兩步走,首先vi ~/.ssh/config加入:
ForwardAgent yes
然后再執(zhí)行命令:
ssh-add
它會(huì)默認(rèn)把~/.ssh/id_rsa加到你的中轉(zhuǎn)代理里。哇卡卡,我胡漢三又回來了~~~
7.防止斷開連接
ssh服務(wù)端,出于安全和節(jié)省資源的考慮,會(huì)把一段時(shí)間不活動(dòng)的會(huì)話自動(dòng)斷開。雖然經(jīng)過前面的改造你連接一臺(tái)機(jī)器已經(jīng)是很省事的事兒了。但是出去抽根兒煙回來,就要再這么登陸一次,讓人感覺實(shí)在不爽。那咋辦呢?俗話說:上有政策,下有對(duì)策。
vi ~/.ssh/config
ServerAliveInterval=60
這樣服務(wù)器是不是變得很乖了呢:)
8.亢龍無悔
還記得<<linux遠(yuǎn)程管理的屠龍刀(***篇)>>有提到,在使用字符界面的圖形工具時(shí)會(huì)亂碼的情況呢?筆者驚喜的發(fā)現(xiàn),那個(gè)問題在使用openssh這個(gè)客戶端工具的時(shí)候,根本不存在!
是什么原因呢?ubuntu對(duì)中文環(huán)境支持的好?因?yàn)橛昧薌NOME Terminal 2.28.1?因?yàn)閟sh啟用了對(duì)utf8的支持?不想追究原因了,因?yàn)槲乙呀?jīng)喜歡上ubuntu了。
本文來自51CTO技術(shù)博客:http://rainbird.blog.51cto.com/211214/248225
【編輯推薦】