看板 Knuckles_note
作者 標題 [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
回列表(←)
分享