AWS EC2 快速連線方法

前言

最近跟著 CourseraStartup Engineering 開始學習我較不熟悉的 Linus 環境底下開發與 Deployment ,順手把註冊半年以久的 AWS 帳號進行信用卡認證,正式開通使用。

不清楚 Coursera 的朋友們可以上 Wikipedia了解詳情。簡單的說,他是由 Stanford 大學教授 Andrew Ng 和 Daphne Koller 發起的大學線上課程,上面有許多一流大學所開設的免費課程,可以讓大眾自由學習。

這篇文章的重點是如何快速連線 AWS EC2,雖然在 Startup Engineering 課程中有介紹如何達成,但dm4大大分享給我更多一點的技巧,在此分享給大家。

原本的情況

遠端連線 EC2 的方法是藉由 ssh 指令進行加密連線,在 AWS 建立新的 instance 的時候,我們會得到一個 .pem 檔案作為連線認證使用。這時候 AWS 給我們的連線範例是:

# @local machine

$ cd downloads  #移動到你的 .pem 檔所在地方
$ ssh -i yourkey.pem ubuntu@ec2-54-218-73-84.us-west-2.compute.amazonaws.com 

這串指令實在很麻煩,身為一個記憶力正常的凡人,看到這段指令絕對是掩面而泣。

所幸課程馬上就傳授如何縮短指令的方法。

課程的版本

簡單來說,我們可以藉由 .ssh/config 檔案預先存好登入所要的資訊並給予別名,之後就可以直接打別名進行連線,系統會直接抓取 config 的資料,就不需要一再輸入。那 .ssh/config 要怎麼寫呢?其實他的基本格式很簡單,就像下面這般:

Host 名稱(就是用來好記的別名)
    HostName 主機名字
    User 登入用戶名
    IdentityFile 驗證文件的路徑

實際上操作的話,以下提供課程所使用的例子:

# @local machine
# 首先先複製 key.pem 到 ~/.ssh 底下,並改好檔案權限
$ mkdir -p ~/.ssh
$ cp ~/downloads/skey.pem ~/.ssh/
$ chmod 400 ~/.ssh/skey.pem
$ chmod 700 ~/.ssh
$ vim ~/.ssh/config
# 在 config 編輯內容如下
Host awshost1
    HostName ec2-54-218-35-71.us-west-2.compute.amazonaws.com #@後面那段
    User ubuntu #@前面那段
    IdentityFile "~/.ssh/skey.pem"

設置好之後就可以以ssh 別名來連線了,比如說以上的例子就是輸入ssh awshost1來連線。

再也不用 .pem 了

雖然上面已經可以十分方便了,但是我們還可以再做更多一點。 上面的方法我們還是需要保留 .pem 檔案,事實上我們可以連本地端的 .pem 檔都不用就可以連線,以下就是要介紹如何跟你的 .pem 說拜拜。

# @local machine 
# 首先移動到你的 .pem 所在的地方,印出 .pem 檔的內容。記得要用你自己的檔名換掉yourkeyname
$ cat yourkeyname.pem  
# 印出來的內容複製起來,他會長的像是:
$ ssh-rsa AAAAB3NzaC1yc2EAA……

再來連線到你 EC2 的遠端機器,把複製到的東西寫到 ~/.ssh/authorized_keys 裡面。

# @remote machine
$ vim .ssh/authorized_keys
# 貼上你剛剛從自己電腦複製出來的那段東西,存檔。

之後你就可以把你的 .pem 檔給刪掉啦!然後記得把你 .ssh/config 底下的 IdentityFile "~/.ssh/skey.pem" 這一行刪掉。 你最後的 config 應該是長這樣子的:

Host awshost1
    HostName ec2-54-218-35-71.us-west-2.compute.amazonaws.com
    User ubuntu

很簡單吧!五分鐘不到的設定可以節省我們以後更多開發時間呢!

參考資料

Startup Engineering: Lecture 3: Linux and Server-Side Javascript

感謝dm4大大的教學。

貓咪圖片 from HDWaller

附註

.pem 全名為 Privacy Enhanced Mail,想了解更多的話可以讀 X.509 在 Wiki 的資料或是 server fault 上面的討論

Posted by Lucien,
AWS, ssh

Comments

Copyright © 2013 - Lucien Lee - Powered by Octopress