顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 Knuckles (站長 那克斯)
標題 [CentOS] 主機間使用金鑰免密碼登入ssh
時間 2013年09月10日 Tue. PM 12:07:36


在兩台主機間互相使用ssh登入、使用scp/sftp傳檔案、或是用rsync同步檔案時
每次都要打密碼很麻煩,而且要寫成shell script時也沒辦法輸入密碼
可以改成使用金鑰的方法認証,之後就不用打密碼了

金鑰的認証方式就是使用者建立一組成對的私鑰與公鑰,
私鑰放在使用者端保管,將公鑰放到想要登入的伺服器端,
登入時看私鑰與公鑰是否配對,可以的話就能登入了


在 Linux 建立成對的金鑰

例如我們想要在使用者端 my_host 用帳號 knuckles
免密碼登入伺服器端 my_server 的帳號 knuckles

在使用者 my_host 端,建立 my_host 的私鑰與公鑰
[knuckles@my_host ~]$ ssh-keygen

後面問的都不用輸入,直接按Enter用預設值即可

Generating public/private rsa key pair.
Enter file in which to save the key (/home/knuckles/.ssh/id_rsa):
Created directory '/home/knuckles/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/knuckles/.ssh/id_rsa.
Your public key has been saved in /home/knuckles/.ssh/id_rsa.pub.
The key fingerprint is:

會在使用者帳號的家目錄下產生兩個檔,分別為rsa加密的私鑰與公鑰
~/.ssh/id_rsa
~/.ssh/id_rsa.pub

使用 ssh-copy-id 將公鑰加入伺服器端的 ~/.ssh/authorized_keys
$ ssh-copy-id my_server

這樣就完成了,登入伺服器端看看是否需要打密碼
$ ssh my_server


手動複製公鑰到伺服器端

沒有 ssh-copy-id 能用的話,
可以手動複製公鑰檔的內容,
或是用 scp 將公鑰檔案傳給伺服器端 my_server,先放在家目錄
[knuckles@my_host ~]$ scp ~/.ssh/id_rsa.pub knuckles@my_server:~

登入伺服器端 my_server
在帳號的家目錄建一個 .ssh 資料夾
[knuckles@my_server ~]$ mkdir ~/.ssh

然後在 ~/.ssh 目錄下建立一個文字檔 authorized_keys
$ vim ~/.ssh/authorized_keys

將剛剛複製的公鑰內容貼進 authorized_keys 檔
或是將 my_client 傳來的公鑰檔 id_rsa.pub 寫入 authorized_keys 檔
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

目錄與檔案要設為只限擁有者讀寫
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

回到使用者端 my_host 試試看登入是否需要打密碼
$ ssh my_server


在 Windows 使用 pietty 建立金鑰

先下載 puttygen.exe
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

產生一組公鑰和私鑰後,複製公鑰的文字,並將私鑰儲存為檔案
[圖]
 
[圖]
 
[圖]
 

在使用 pietty 時載入私鑰,點「選項」/「詳細設定」
[圖]
 
在 Connection/SSH/Auth 點 Browser 載入剛剛儲存的私鑰檔案
[圖]
 

登入 my_server 將剛剛複製的公鑰貼到 authorized_keys 裡
$ vim ~/.ssh/authorized_keys


使用 Xshell 的話參考這篇 [Xshell] Windows 下好用的 SSH 登入程式 - KnucklesNote板 - Disp BBS


設定 ssh 禁止使用密碼登入

設定好登入免密碼後,可將 ssh 設為禁止使用密碼登入,以增加安全性

$ vim /etc/ssh/sshd_config

尋找 PasswordAuthentication yes
改成 PasswordAuthentication no

重啟 sshd (CentOS 6)
$ service sshd restart
重啟 sshd (CentOS 7~)
$ systemctl restart sshd



□ 問題解決記錄

scp 使用 root 時,不能用 ~ 代表家目錄,要用 /root


◎ 使用 Pietty 登入時,顯示 server refused our key
只能用輸入密碼登入
參考: http://callmepeanut.blog.51cto.com/7756998/1336864

修改 /etc/ssh/sshd_config 設定

#StrictModes yes
StrictModes no

#PubkeyAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

儲存後重啟 sshd
$ sudo systemctl restart sshd


◎ 登入顯示權限被拒絕

若登入時顯示
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

如果是用 root 的話,sshd_config 必需設定
PermitRootLogin yes

可能 ssh 版本問題,更新看看
$ yum update openssh

檢查 /var/log/secure,若出現這行
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms
代表伺服器不接受 rsa 加密的金鑰
可以改產生 EdDSA 加密的金鑰
$ ssh-keygen -t ed25519 -a 250
$ ssh-copy-id my_server

產生的私鑰與公鑰檔為
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub


參考:
https://calvertyang.github.io/2016/10/05/upgrade_your_ssh_keys/
升級你的 SSH 金鑰! 說明如何改用 Ed25519 金鑰


--
※ 作者: Knuckles 時間: 2013-09-10 12:07:36
※ 編輯: Knuckles 時間: 2023-11-05 02:19:12 (台灣)
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 4405 
※ 文章分類: Linode CentOS 架站筆記
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇