最近每天加班,最先就是 9 點下班,最晚試過 12 點出大廈門口的,踏出門口的第一步,靈魂不禁自主地問了本身一句:「我 TM 是誰」。linux
在回答不了這個「宇宙級」難題之餘,我相信,有不少奮戰在開發一線的同窗跟我同樣,渴望在日落以前可以下一次早班,去打一場酣暢淋漓的球,或者去見一面思慕已久的女神。算法
爲了改變現狀,只能從平常的開發環節下手,優化一些耗時費力不討好沒收穫的環節,讓它可以更加「傻瓜式」地運做,給咱們留下更多地時間去解決核心問題或者完成開發進度。今天,我就想硬磕「登陸遠程服務器」這個環節。有沒有以爲在公司電腦上保存明文的帳號密碼不安全,記在腦子裏又每次要輸入,天天還得重複登陸好幾回,還浪費腦容量。vim
看到這裏,若是咱們仍是手動 ssh 加用戶名密碼和 ip 地址登錄的,要好好反思一下了,咱們是程序猿,可以躺着毫不坐着!那有沒有一種更方便快捷的方式呢?安全
# 還這樣的登錄的,要打 pp 了
$ ssh username@ip
# 緊接着輸入密碼
複製代碼
有,那就是不用密碼去登錄服務器,天天能節省下 30 分鐘,早點下班,多打一盤 LOL 或者是王者榮耀那也是極好的!bash
第一次登陸遠程服務器的時候,終端交互上,linux 主機會提示是否記住「指紋」,也就是本機的身份。ssh 登陸遠程主機的時候會攜帶本機的 ssh 公鑰,本機的 ssh 公鑰通常位於 $HOME/.ssh/
,是公私鑰成對出現的。若是沒有,能夠生成手動生成 rsa 算法加密的公私鑰文件:服務器
$ ssh-keygen -t rsa -C "your_email_name@email_server.com"
複製代碼
回車以後,會提示輸入私鑰的文件名,若是你直接回車,會自動默認生成爲 $HOME/.ssh/id_rsa
,同時會生成一份匹配的公鑰文件 $HOME/.ssh/id_rsa.pub
。微信
若是有自定義私鑰文件名,那麼須要配置本機在 ssh 登陸遠程服務器時候,指定到對應的私鑰文件。打開 ssh 默認配置文件:ssh
# 若是不存在,則會自動建立
$ vim ~/.ssh/config
複製代碼
追加入以下內容:優化
# remote_server_alias 是一個自定義遠程服務器的別名,讓你本身能清晰的區分
Host remote_server_alias
# 遠程服務器的 ip 地址
HostName xxx.xxx.xxx.xxx
# 遠程登陸時候默認用戶名
User root
# ssh 所使用端口,默認就是 22,因此這行能夠不輸入
Port 22
# 本地私鑰文件路徑
# 若是你在上一步有自定義了私鑰的文件名,那麼替換一下 id_rsa 就能夠了
IdentityFile /Users/Hades/.ssh/id_rsa
複製代碼
保存並退出,本地工做準備就緒。ui
接着登陸遠程服務器,完成相對應的設置。
打開遠程服務器上的 ssd 服務配置文件:
$ vim /etc/ssh/sshd_config
複製代碼
找到如下三項,並確保以下內容:
RSAAuthentication yes # RSA認證
PubkeyAuthentication yes # 公鑰認證
AuthorizedKeysFile .ssh/authorized_keys # 公鑰認證文件路徑
PermitRootLogin yes # 容許 root 用戶登陸
複製代碼
若是有改動,則重啓 sshd 服務:
$ systemctl restart sshd
# 或者
$ service sshd restart
複製代碼
最後一步,將本地生成的公鑰的文件內容,粘貼到遠程服務器的 $HOME/.ssh/authorized_keys
文件中。這裏要聲明一點,若是你是要對 root 用戶進行免密登陸,則 $HOME
應該爲 /root
,那若是是其餘的普通用戶,則爲 /home/xxx
。
拷貝本地公鑰文件的內容:
$ cat ~/.ssh/id_ras.pub
# 打印完成後,全選拷貝
複製代碼
而後登陸遠程服務器,打開公鑰認證文件路徑:
$ vim ~/.ssh/authorized_keys
複製代碼
粘貼進剛纔複製的內容,保存退出,並退出遠程服務器的登陸。
如今試試再登陸遠程服務器吧,不會在須要密碼啦~
完成上面的操做步驟後,貌似登陸服務器的時候還須要輸入一串命令:
$ ssh root@xxx.xxx.xxx.xxx
複製代碼
我懶啊,就想一鍵搞定怎麼辦?
若是你所使用的終端有所謂的設置「快捷鍵」,那麼福音也就來了。
我用的是 Mac 上面的 iTerm2 終端神器,能夠設置以下快捷鍵,之後我只須要按下 ⌃+⌘+1
就一鍵登陸上去了,效率提高得不是一丁半點。
既然那麼懶了,那就再過度一點吧。
我平時登陸服務器,也就只去固定的路徑查看下日誌什麼的,能不能讓我一登陸就達到指定的目錄路徑呢?省得我還要記住一串的路徑,萬一忘了,那就費事兒了。
有的。
登陸遠程服務器,打開 bash 終端交互的我的設置文件:
$ vim ~/.bash_profile
複製代碼
追加一句:
cd /path/tp/dest/dir
複製代碼
完成。
論懶癌的最高境界,「不是花最少的力氣去作一件事,是我壓根就不去作」!
是的,萬一咱們只須要在服務器上執行一條命令呢?我還大老遠地整那麼多事情幹啥?
來吧,一條命令搞定它:
$ ssh root@xxx.xxx.xxx.xxx pwd
$ ssh root@xxx.xxx.xxx.xxx cd /services/logs && tail error.log -n 100
複製代碼
是的,ssh 登陸命令後面,跟你要執行的命令便可。
只想今晚早點回家跑個步~