2012-12-24 52 views
19

幾天前我已經設置了EC2實例,甚至昨天晚上我能夠順利地進行SSH連接,沒有任何問題。今天早上,我無法甩掉它。 22號港口已經在安全部門開放,自昨晚起我沒有改變任何東西。運行EC2實例突然拒絕SSH連接

錯誤:

ssh: connect to host [ip address] port 22: Connection refused 

我最近類似的問題,我無法弄清楚爲什麼發生,所以我不得不創建一個新的實例,再設置它,並連接和配置所有EBS存儲到新的。花了我幾個小時......現在又發生了。在之前的版本中,我安裝了denyhost,這可能阻止了我,但在當前版本中,只有apache2和mysql正在運行。

當前實例現在已經運行了16個小時,所以我不認爲這是因爲它沒有完成引導...此外,端口22對所有源(0.0.0.0/0)都是開放的,並且是使用tcp協議。

任何想法?

謝謝。

+0

你設置實例上的SSH安全性,讓所有IP或只是你的嗎?如果只是你的,你的IP是否改變了? – Kirk

+0

@Kirk:所有端口(包括22)的源爲0.0.0.0/0。協議:tcp。 – Sherzod

+0

您是否從您的實例創建了AMI?如果是這樣,請從中運行新的實例。 –

回答

24

在@ abhi.gupta200297的幫助下,我們能夠解決它。

問題在於/etc/fstab中的錯誤,並且sshd本應在fstab成功後啓動。但它不是,因此,sshd不會啓動,這就是爲什麼它拒絕連接。解決方案是創建一個臨時實例,從原始實例掛載根EBS,並註釋掉fstab中的內容,然後讓它重新連接。在未來,我剛剛停止使用fstab,並創建了一堆shell命令將EBS卷掛載到目錄,並將它們添加到/etc/init.d/ebs-init-mount文件中,然後運行update-rc.d ebs-init-mount defaults來初始化文件,我不再遇到鎖定ssh的問題。

UPDATE 2015年4月23日

亞馬遜團隊創建類似問題的視頻教程,並展示如何使用這種方法進行調試:https://www.youtube.com/watch?v=_P29ZHu_feU

+1

您可以發表博文或者在這裏評論你用來替換fstab的shell命令/ init腳本?我遇到了同樣的問題。 –

+0

你是shershams,是救生員。這個筆記應該包含在亞馬遜文檔中。 – s29

+0

我的問題特別是臨時存儲上的文件系統在機器關閉時被擦除,因此啓動後fstab無法安裝它。您的解決方案的想法也非常適合我的問題。 – asaad

1

轉到您的AWS管理控制檯> select instance>右鍵單擊並選擇「獲取系統日誌」 這將列出出錯的地方。

+1

那裏沒有什麼用處......最後的日誌正在談論EBS卷,我昨天晚上正在處理這些卷。 – Sherzod

6

看起來像sshd可能因某種原因停止。實例EBS是否支持?如果是這種情況,請嘗試關閉並重新啓動它。這應該可以解決問題。

另外,你是否能夠從AWS Web控制檯ssh?他們有一個java插件來插入實例。

+0

aws web控制檯也說連接被拒絕。我將嘗試立即重新啓動。但除了重新啓動之外,還有別的方法嗎?它使得運行在那裏的服務和網站對用戶不可用... – Sherzod

+0

嘗試對端口22上的實例執行telnet。'telnet hostname 22'。如果連接起來,那至少會告訴我們sshd正在運行,但由於某種原因我們會被阻止,並且可以從那裏進行故障排除。 –

+0

連接被拒絕...我已重新啓動實例,但仍無法訪問它。而且,現在apache和mysql也沒有運行。幫幫我? – Sherzod

4

這發生在我身上的紅帽EC2實例,因爲這兩條線路都將自動被追加在/ etc/ssh/sshd_config文件的每次我開始了我的情況下結束時間:

的PermitRootLogin沒有密碼
UseDNS沒有

其中一個追加操作不換行做,所以sshd_config文件的尾部看起來像:

的PermitRootLogin沒有密碼
UseDNS noPermitRootLogin沒有密碼
UseDNS沒有

導致的sshd到未能在下次發佈時開始。我認爲這是由於此處報告的錯誤引起的:https://bugzilla.redhat.com/show_bug.cgi?id=956531解決方案是刪除sshd_config文件底部的所有重複條目,並在最後添加額外換行符。

+5

每當實例通過/etc/rc.local文件啓動(或重新啓動)時,都會添加這些行。爲了防止這種情況一遍又一遍地發生,您還需要註釋掉/etc/rc.local文件中的3個相關行。這將解決好問題。 – Telegard

+0

ianmcook,@Telegard:謝謝,這個竅門 –

4

對於那些你們誰過這個職位後來,因爲你無法在重新啓動後SSH到您的EC2實例,this is cross-posteda similar question at serverfault

the AWS Developer Forum post on this topic

Try stopping the broken instance, detaching the EBS volume, and attaching it as a secondary volume to another instance. Once you've mounted the broken volume somewhere on the other instance, check the /etc/sshd_config file (near the bottom). I had a few RHEL instances where Yum scrogged the sshd_config inserting duplicate lines at the bottom that caused sshd to fail on startup because of syntax errors.

Once you've fixed it, just unmount the volume, detach, reattach to your other instance and fire it back up again.

讓我們打破這種下來,並鏈接到AWS文檔:

  1. Stop the broken instance並通過進入EC2管理缺點分離EBS(根卷)點擊「Elastic Block Store」>「Volumes」,右鍵單擊與您停止的實例相關聯的卷。
  2. 在與破壞的實例然後attach the original EBS root volume as a secondary volume to your new instance相同的區域和相同的OS中啓動新實例。下面的步驟4中的命令假定您將卷掛載到名爲「data」的文件夾。
  3. 一旦你mounted the broken volume somewhere on the other instance
  4. 檢查 「的/ etc/sshd_config中」 發出這些命令文件重複的條目:
    • cd /etc/ssh
    • sudo nano sshd_config
    • ctrl-v一堆次獲得到文件底部
    • ctrl-k底部的所有行都提到「PermitRootLogin without-password」和「UseDNS no」
    • ctrl-xY保存並退出編輯的文件
  5. @Telegardpoints out (in his comment)我們已經只有​​固定的症狀。我們可以通過註釋掉「/etc/rc.local」文件中的3個相關行來修復原因。所以:
    • cd /etc
    • sudo nano rc.local
    • 尋找 「的PermitRootLogin ......」,並刪除他們
    • ctrl-xY保存並退出編輯的文件
  6. 一旦你」我已經修好了,只要unmount the volume,
  7. 分離進入EC2管理控制檯,點擊「Elastic Block Sto重新「>」卷「,右鍵單擊與停止的實例關聯的卷,
  8. reattach to your other instance
  9. fire it back up again
+0

這是這個問題上最有用的帖子!非常感謝。 我想補充一點,使卷在Red HaT下成爲根卷名/ dev/sda1。 – Sych

+0

@Sych:很高興幫助。卷附件文檔中有一節提供了有關根卷名稱的指導:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html#device_naming –

0

我得到了類似的SSH通過分離鎖定的EBS卻忘了修改/ etc/fstab中