2015年7月11日 星期六

[LINUX] 使用憑證登入SSH

為何要使用憑證登入ssh呢? 因為如此一來登入ssh的動作就是認機不認人,簡單的說,往後登入SSH不需Key-in密碼,這在某些應用上是方便的,比如說 Github Private Server,若是透過ssh做push的話就不用每次都要打密碼,也可以很方便的用Git的圖形介面做同步(Sync)動作。

我用的是CentOS , 基本上是照著官方文件操作的

參考來源: http://wiki.centos.org/HowTos/Network/SecuringSSH#head-9c5717fe7f9bb26332c9d67571200f8c1e4324bc


概念如下:

在終端機上:

產生RSA憑證
#ssh-keygen -t rsa
如果一路enter到底的話,會在你的本機~/.ssh資料夾下產生id_rsa.pub檔案,即為公鑰

接著將此公鑰傳遞到伺服器上,
#scp ~/.ssh/id_rsa.pub user@192.168.0.1:/tmp
// 將id_rsa.pub拷貝到 192.168.0.1的tmp資料夾下,以user登入


在伺服器上(假設登入為user):

在~/.ssh資料夾下新建authorized_keys
#touch ~/.ssh/authorized_keys
接著匯入方才傳到伺服器上的公鑰內容到authorized_keys檔案內
#cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

最後設定一下SELinux(效果不明,不大清楚為何要做)
#restorecon -Rv ~/.ssh

官方文件就寫到此了,但是!!!!!本魯我卡在這裡仍是無法透過憑證登入!!!
原來還少幾個設定……(價值3小時)

在伺服器上(登入為root)
修改sshd設定
#vim /etc/ssh/sshd_config

裡頭有幾行設定預設是未開啟的,請把他們打開:
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

接著重開sshd
#service sshd restart

如此一來才能透過RSA憑證登入,GOOGLE了好久最後自己發現

後記1:檢視公鑰碼(有時候弄到亂掉,可以下此指令比對終端機與伺服器上的公鑰是否一致)
#ssh-keygen -lf id_rsa.pub

後記2:CentOS 的 useradd 指令沒有 --disabled-password這個選項,只要單純的useradd user即能做到不允許密碼登入(因為密碼未設定)