我本人其實及其煩使用配置文件這種東西,有時候看到巨大又複雜的配置文件,甚至複雜過代碼的時候,總感受設計配置文件的人有些本末倒置。程序員
可是ssh這個配置文件真的很是簡單好用,讓我稍微體驗了一次配置文件使用的快感。redis
在使用ssh confg以前我大概是這樣設置和管理本身的ssh鏈接的。shell
首先條線一個集中的地方,好比我本身在桌面上建立一個sa的文件夾,而後在這個文件夾裏面放上本身常常鏈接的服務器的鏈接命令作成一個腳本相似名字叫bash
ssh-redis服務器
#!/bin/sh ssh piperck@115.28.39.64 -p 22
作一個shell腳本,裏面放上想要ssh的地址。而後把這個sa文件夾設置到環境變量中,使得能夠在terminal的任意地方調用到他們。ssh
由於我本身使用的zsh因此在個人.zshrc裏面設置上這個文件夾的路徑加密
export PATH="/Users/piperck/Desktop/tools/sa:$PATH"
而後從新開個shell 就能夠在任何地方輸入ssh-redis方便的登錄到目標服務器上面了。spa
除了上面這個辦法,固然你也能夠選擇在.zshrc 或者 .bashrc裏面使用Alias指定一個 ssh登錄的代號做爲命令的名字從而執行命令好比設計
Alias dev "ssh www.xiachufang.com -p 22"
其實這樣已經很是方便了我以爲,可是做爲懶癌晚期程序員每次遇到新服務器須要配置的時候,都以爲這種添加腳本的方法巨麻煩,並且文件夾裏面的腳本會愈來愈多。有沒有更優雅的方法能夠幹這個事兒?code
ssh config配置文件能夠解決這個問題,讓全部腳本都被從新放回一個文件中
在~/.ssh/ 下建立 config文件,並以以下格式編輯配置文件:
Host lab HostName amazon.com User piperck IdentityFile ~/.ssh/id_rsa
Host: 是咱們在輸入命令的時候的名字 好比我這裏是lab 那麼我使用ssh命令的時候須要使用
ssh lab
注意這裏是空格,而不是 剛纔我腳本輸的ssh-redis 中間是橫線,由於腳本能夠隨便本身使用名字,也算是一個好處吧。
HostName: 是目標主機的主機名,也就是平時咱們使用ssh後面跟的地址名稱。
Port:指定的端口號。
User:指定的登錄用戶名。
IdentifyFile:指定的私鑰地址。
而後就能夠愉快的使用ssh lab 登錄了。一樣的道理,能夠在這個config文件裏面創建無數個相似的配置,而不再必每次都寫腳本了。看起來仍是蠻方便的。
另外在設置了config以後可能出現一個問題,每次在鏈接的時候可能會要求你輸入私鑰的對稱加密密匙,因此須要把這個鑰匙加入到authentication agent中。
因此這裏要說到一個ssh-add命令
使用ssh-add ~/.ssh/your_private_key 輸入你的私鑰密碼 就能夠把你的私鑰加入到ssh-agent中去,方便的讓他幫你管理。而再也不須要每次輸入的時候都重複輸入密碼。
固然不須要的時候 你也可使用
ssh-add -D 刪除全部管理的密鑰
ssh-add -d 刪除指定的
ssh-add -l 查看如今增長進去的指紋信息
ssh-add -L 查看如今增長進去的私鑰
若是重啓以後,會發現須要從新load一下ssh-agent
ssh-add -K 將指紋加到鑰匙串裏面去
ssh-add -A 能夠把鑰匙串裏面的私鑰密碼,load進ssh-agent
Reference:
http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/ Simplify Your Life With an SSH Config File