google關於ssh key的解釋(轉)轉的google的wiki的


SSH keys (簡體中文)

 
 

SSH 密鑰對可以讓您方便的登錄到 SSH 服務器,而無需輸入密碼。由於您無需發送您的密碼到網絡中,SSH 密鑰對被認為是更加安全的方式。再加上使用密碼短語 (passphrase) 的使用,安全性會更上一層樓。

同時,我們可以使用 SSH agent 來幫助我們記住密碼短語,無需我們記住每一個密鑰對的密碼短語,減輕了我們的負擔。

本文將為您介紹如何管理密鑰對,以方便的連接到您的 SSH 服務器。本文默認您已經熟知 Secure Shell (簡體中文),並安裝好位於官方軟件倉庫 的 openssh

背景

SSH 密鑰對總是成雙出現的,一把公鑰,一把私鑰。公鑰可以自由的放在您所需要連接的 SSH 服務器上,而私鑰必須穩妥的保管好。

所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字符串,用戶用自己的私鑰加密后,再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功,就證明用戶是可信的,直接允許登錄 shell,不再要求密碼。這樣子,我們即可保證了整個登錄過程的安全,也不會受到中間人攻擊。

生成密鑰對

我們可以使用 ssh-keygen 命令生成密鑰對

$ ssh-keygen -t ecdsa -b 521 -C "$(whoami)@$(hostname)-$(date -I)"
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/username/.ssh/id_ecdsa.
Your public key has been saved in /home/username/.ssh/id_ecdsa.pub.
The key fingerprint is:
dd:15:ee:24:20:14:11:01:b8:72:a2:0f:99:4c:79:7f username@localhost-2011-12-22
The key's randomart image is:
+--[ECDSA  521]---+
|     ..oB=.   .  |
|    .    . . . . |
|  .  .      . +  |
| oo.o    . . =   |
|o+.+.   S . . .  |
|=.   . E         |
| o    .          |
|  .              |
|                 |
+-----------------+

在上面這個例子中,ssh-keygen 生成了一對長度為 521 bit (-b 521) 的 ECDSA (-t ecdsa) 加密的密鑰對,comment 為 -C "$(whoami)@$(hostname)-$(date -I)"。而 randomart image 是 OpenSSH 5.1 引入的一種簡單的識別指紋 (fingerprint) 的圖像。

選擇合適的加密方式

橢圓曲線數字簽名算法 (ECDSA) 生成的密鑰更小,安全性更高。OpenSSH 5.7 建議默認使用 ECDSA,詳情參見 OpenSSH 5.7 Release Notes。較舊的 OpenSSH 版本可能不支持 ECDSA 密鑰,需要注意。而一些廠商因專利問題,暫未提供 ECDSA 的實現。

注意: 截至 2014 年06 月 10 日,這個  GNOME bug 導致 Gnome Keyring 暫不支持 ECDSA。

如果您要生成 RSA (768-16384 bit) 或者 DSA (1024 bit) 密鑰對,需要使用 -t rsa 或者 -t dsa,並修改 -b 選項。-b 可以省略,ssh-keygen 會生成一個默認大小的密鑰對。

注意: 這些密鑰對是用於認證的,選擇更加復雜的密鑰類型並不會在登錄時加重您的 CPU 負擔。

選擇密鑰存儲位置以及密碼短語

輸入 ssh-keygen 時,它會詢問您將密鑰對保存到何處,文件名如何命令等。默認情況下,密鑰對保存到 ~/.ssh 下,文件名則根據加密類型自動命名為 id_ecdsa (私鑰),id_ecdsa.pud (公鑰)。建議您采用默認的存儲位置和文件名。

而在 ssh-keygen 請求您輸入一個密碼短語時,您應該輸入一些難以猜到的短語。如果短語足夠隨機和復雜,則私鑰落入賊人之手時就不會容易被破解掉。

當然,您也可以不輸入任何密碼短語,也能夠生成所需的密鑰對。雖然這用起來挺方便的,但是您應該知道這會很危險。在沒有輸入密碼短語的情況下,您的私鑰未經加密就存儲在您的硬盤上,任何人拿到您的私鑰都可以隨意的訪問對應的 SSH 服務器。還有一種情況,如果您不是 root 用戶,則該機器上的 root 用戶可以完全擁有您的密鑰對,因為他的權限是最大的。

不修改密鑰對的情況下修改密碼短語

您可以使用 ssh-keygen 命令來修改密碼短語,而無需改動密鑰對。假設您要修改的密鑰對使用 RSA 加密,輸入以下命令即可:

$ ssh-keygen -f ~/.ssh/id_rsa -p

管理多組密鑰對

您可以創建 ~/.ssh/config 來管理多組密鑰對,每一個 SSH 服務器對應一組密鑰對。或者,您甚至可以對所有的 SSH 服務器使用同一組密鑰對。不過如果您覺得這樣不合適,還是編輯配置文件:

~/.ssh/config
Host SERVERNAME1
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa_SERVER1
  # CheckHostIP yes
  # Port 22
Host SERVERNAME2
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa_SERVER2
  # CheckHostIP no
  # Port 2177
ControlMaster auto
ControlPath /tmp/%r@%h:%p

更多選項幫助請參考

$ man ssh_config 5

將公鑰復制到遠程服務器上

創建好密鑰對之后,您需要將公鑰上傳到遠程服務器上,以便用於 SSH 密鑰認證登錄。公鑰文件名和私鑰文件名相同,只不過公鑰文件帶有擴展名 .pub 而私鑰文件名則沒有。千萬不要將私鑰上傳,私鑰應該保存在本地。

簡單的方法

注意: 如果您的遠程服務器默認使用的是 non- sh 的 shell,比如  tcsh,則此方法可能不奏效。詳情參見這個  bug
注意: 如果使用以下兩種方法外的方法請不要忘記注冊公鑰文件,您只需要命令
$ cat ~/.ssh/id_ecdsa.pub >> ~/.ssh/authorized_keys

如果您的私鑰文件為 ~/.ssh/id_rsa.pub,您只需要輸入命令

$ ssh-copy-id remote-server.org

如果您的遠程服務器用戶名與本地的不同,您需要指明用戶名

$ ssh-copy-id username@remote-server.org

如果您的私鑰文件名不是默認的,您會得到錯誤 /usr/bin/ssh-copy-id: ERROR: No identities found。這種情況下,您需要修改命令為

$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub username@remote-server.org

如果遠程服務器監聽端口不是 22,您也需要指明端口

$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub -p 221 username@remote-server.org

傳統的方法

使用命令

$ scp ~/.ssh/id_ecdsa.pub username@remote-server.org:

將公鑰上傳到服務器。注意,該命令最末的 : 不可省略。上傳成功之后,先使用口令登錄到服務器,將公鑰文件重命名為 authorized_keys,並移動到 ~/.ssh 下,若 ~/.ssh 不存在則新建一個。

$ ssh username@remote-server.org
username@remote-server.org's password:
$ mkdir ~/.ssh
$ cat ~/id_ecdsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_ecdsa.pub
$ chmod 600 ~/.ssh/authorized_keys

上面最后兩個命令移除服務器上的公鑰,並設置 authorized_keys 的權限為只有您,也即文件擁有者,有讀寫權限。

安全性

保證 authorized_keys 文件的安全

為了保證安全,您應該阻止其他用戶添加新的公鑰。

將 authorized_keys 的權限設置為對擁有者只讀,其他用戶沒有任何權限:

$ chmod 400 ~/.ssh/authorized_keys

為保證 authorized_keys 的權限不會被改掉,您還需要設置該文件的 immutable 位權限:

# chattr +i ~/.ssh/authorized_keys

然而,用戶還可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目錄和 authorized_keys 文件。要避免這種情況,您需要設置 ~./ssh 的 immutable 位權限:

# chattr +i ~/.ssh
注意: 如果您需要添加新的公鑰,您需要移除  authorized_keys 的 immutable 位權限。然后,添加好新的公鑰之后,按照上述步驟重新加上 immutable 位權限。

禁用密碼登錄

將公鑰上傳到 SSH 服務器上之后,您就不再需要輸入 SSH 賬戶密碼來登錄了。直接使用賬戶密碼登錄容易受到暴力破解的攻擊。倘若您沒有提供 SSH 私鑰,默認情況下,SSH 服務器就會讓您直接使用密碼登錄,這就有可能讓不法之徒來猜測您的密碼,有一定的安全隱患。要禁用這一行為,您需要編輯 SSH 服務器上的 /etc/ssh/sshd_config

/etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no

雙因素認證與公鑰

從 OpenSSH 6.2 開始,您可以使用 AuthenticationMethods 選項來自己添加工具鏈進行認證。這樣就可以配合公鑰使用雙因素認證了。

谷歌身份驗證器設置請參考 Google Authenticator

如果您使用 PAM (Pluggable Authentication Module,插入式驗證模塊),編輯下面這幾行:

/etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam
/etc/pam.d/sshd
#%PAM-1.0
auth required pam_google_authenticator.so

如果您設置 PAM 僅使用 pam_google_authenticator.so,則 sshd 則會采用雙因素認證,而無需密碼。如果雙因素認證失敗,即使有有效的公鑰,sshd 也不允許登錄。您可以加上 nullok 選項來允許用戶使用公鑰登錄:

/etc/pam.d/sshd
#%PAM-1.0
auth required pam_google_authenticator.so nullok

SSH agents

如果您的私鑰使用密碼短語來加密了的話,每一次使用 SSH 密鑰對進行登錄的時候,您都必須輸入正確的密碼短語。

而 SSH agent 程序能夠將您的已解密的私鑰緩存起來,在需要的時候提供給您的 SSH 客戶端。這樣子,您就只需要將私鑰加入 SSH agent 緩存的時候輸入一次密碼短語就可以了。這為您經常使用 SSH 連接提供了不少便利。

SSH agent 一般會設置成在登錄會話的時候自動啟動,並在整個會話中保持運行。有不少的 SSH agent 供您選擇,我們將為您介紹幾種常用的 SSH agent,您可以根據您的需要進行選擇。

ssh-agent

ssh-agent 是 OpenSSH 自帶的一個 SSH agent,它可以直接作為 SSH agent 來使用,或者作為其他 SSH agent 的后端。ssh-agent 運行時會自動 fork 它自身,然收打印出其所需的環境變量。

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;

要使用這些環境變量,您需要使用 eval 命令來運行它

$ eval $(ssh-agent)
Agent pid 2157

您可以將上述命令添加到 ~/.bash_profile,以便您啟動 登錄外殼 的時候它自動運行。

$ echo 'eval $(ssh-agent)' >> ~/.bash_profile

如果您想要所有的用戶都可以使用 ssh-agent,可以直接把上述命令加入到 /etc/profile

# echo 'eval $(ssh-agent)' >> /etc/profile

ssh-agent 運行起來之后,您還需要將您的私鑰加入它的緩存。

$ ssh-add ~/.ssh/id_ecdsa
Enter passphrase for /home/user/.ssh/id_ecdsa:
Identity added: /home/user/.ssh/id_ecdsa (/home/user/.ssh/id_ecdsa)

如果您想要在登錄 shell 的時候自動添加您的私鑰到 ssh-agent 的緩存,您需要在 ~/.bash_profile 加入以下命令:

ssh-add

如果您的私鑰已用密碼短語加密,ssh-add 會提示您輸入密碼短語。輸入爭取的密碼短語之后,您在*當前會話*中就不需要再次輸入密碼短語就能夠使用密鑰對進行 SSH 登錄了。

如果您想要在用到私鑰的時候再輸入密碼短語,您可以添加以下命令到 ~/.bashrc

$ ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'

但是這樣做有個缺點,每次啟動 登錄外殼 都會產生一個 ssh-agent 實例,並在會話期間一直運行。不久之后,您的系統中就會有多個根本不再需要的 ssh-agent 進程在運行。稍后,我們將為您介紹其他 ssh-agent 前端,它們能夠避免這個問題。

ssh-agent 作為包裝程序運行

根據加州大學伯克利分校實驗室的這份 ssh-agent 教程,還有一個隨 X 會話啟動 ssh-agent 的方法,該法用於您在使用命令 startx 啟動 X的時候,可以在命令前加上 ssh-agent

$ ssh-agent startx

您也可以在 .bash_aliases 中設置別名以方便使用:

alias startx='ssh-agent startx'

這樣做可以避免多個會話中存在多余的 ssh-agent 進程,實際上,整個 X 會話中只有一個 ssh-agent 在運行了。

GnuPG

注意: GnuPG < 2.0.21 不支持 ECC。GnuPG >= 2.0.21 支持 ECDSA。

GnuPG 可以從 官方軟件倉庫 安裝 gnupg。如果您已經在使用 GnuPG,您也許想要 GnuPG 來緩存您的私鑰。當然咯,有些用戶比較喜歡在 GnuPG 對話框來輸入 PIN 碼,這樣子管理密碼短語也是不錯的選擇。

{注意|如果您使用 KDE 作為桌面環境,且安裝了 kde-agent[broken link: package not found] 的話,您只需在 ~/.gnupg/gpg-agent.conf 中設置 enable-ssh-support。否則,請繼續閱讀。}

要使用 GnuPG agent,您首先要啟動 gpg-agent,並加上 --enable-ssh-support 選項。比如,記得給腳本加上可執行權限:

/etc/profile.d/gpg-agent.sh
#!/bin/sh

# Start the GnuPG agent and enable OpenSSH agent emulation
gnupginf="${HOME}/.gpg-agent-info"

if pgrep -x -u "${USER}" gpg-agent >/dev/null 2>&1; then
    eval `cat $gnupginf`
    eval `cut -d= -f1 $gnupginf | xargs echo export`
else
    eval `gpg-agent -s --enable-ssh-support --daemon --write-env-file "$gnupginf"`
fi

gpg-agent 運行起來之后,您就可以使用 ssh-add 命令來認證密鑰對,正如上文中 ssh-agent 做的那樣。已認證的密鑰對列表保存在 ~/.gnupg/sshcontrol 文件中。此后,在需要使用您的私鑰密碼短語是,GnuPG 會顯示一個對話框讓您輸入。您可以通過配置文件 ~/.gnupg/gpg-agent.conf 來管理您的密碼短語緩存。比如,下面這個例子說明如何使用 gpg-agent 來緩存您的密鑰 3 小時:

~/.gnupg/gpg-agent.conf
  # Cache settings
  default-cache-ttl 10800
  default-cache-ttl-ssh 10800

您還可以在此文件中設置 PIN 輸入框 (GTK、QT 或者 ncurses 版本) 等內容。

注意: 您必須創建一個  gpg-agent.conf 文件, write-env-file 變量必須設置好,以便允許  gpg-agent 在 SSH 登錄過程中的使用。
~/.gnupg/gpg-agent.conf
  # Environment file
  write-env-file /home/username/.gpg-agent-info
  
  # Keyboard control
  #no-grab
    
  # PIN entry program
  #pinentry-program /usr/bin/pinentry-curses
  #pinentry-program /usr/bin/pinentry-qt4
  #pinentry-program /usr/bin/pinentry-kwallet
  pinentry-program /usr/bin/pinentry-gtk-2

要使用 gpg-agent 作為 SSH agent,您需要 source & export gpg-agent 寫入 ~/.gpg-agent-info 文件的環境變量,也就是 write-env-file 所指的文件。

~/.bashrc
...

if [ -f "${HOME}/.gpg-agent-info" ]; then
  . "${HOME}/.gpg-agent-info"
  export GPG_AGENT_INFO
  export SSH_AUTH_SOCK
fi

Keychain

Keychain 是一個用來方便管理 SSH 密鑰對的程序,它能盡最大努力去減少對用戶的打擾。實際上,它就是一個 shell 腳本,驅動 ssh-agent 或者 gpg-add 來工作。一個值得注意的特性是,keychain 在多個會話中重復使用同一個 ssh-agent 進程。這意味着您只需要在機器啟動時輸入一次密碼短語即可。

您可以從 官方軟件倉庫 安裝 keychain

將下列內容加入到 ~/.bash_profile

~/.bash_profile
eval $(keychain --eval --agents ssh -Q --quiet id_ecdsa)

如有需要,請把 id_ecdsa 換成您的私鑰路徑。如果您使用的 shell 不兼容 Bash (簡體中文),請參考 keychain --help 或者 man keychain

要測試 keychain 是否配置成功,請注銷當前會話,重新登錄。如果這是您第一次運行 keychain,則您會被要求輸入私鑰的密碼短語。因為 keychain 復用已成功登錄的會話中的 ssh-agent 進程,所以您再次登錄是就無需輸入密碼短語了。當您重啟機器時,您才會被要求再次輸入密碼短語。

另一種啟動 keychain 的方式

調用 keychain 的方法有很多種,您可以自行嘗試,找到最適合您的那一種。keychain 命令提供了不少的選項來進行設置,您可以參考它的手冊。

這里我們介紹其中一種不錯的方法,以 root 身份創建 /etc/profile.d/keychain.sh,並添加下列內容:

/etc/profile.d/keychain.sh
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_ecdsa
[[ -f $HOME/.keychain/$HOSTNAME-sh ]] && source $HOME/.keychain/$HOSTNAME-sh

記得給該腳本加上可執行權限:

# chmod +x /etc/profile.d/keychain.sh

如果您想要在第一次使用私鑰時才輸入密碼短語,而非一開機登錄就輸入的話,您可以將下列內容加入 ~/.bashrc

alias ssh='eval $(/usr/bin/keychain --eval --agents ssh -Q --quiet ~/.ssh/id_ecdsa) && ssh'

這樣子,當您開機后首次使用密鑰對連接 SSH 服務器時,您才需要提供密碼短語。但是,這只在 ~/.bashrc 可用的情況下才奏效,所以您應該保證第一次使用 SSH 連接時是在終端下進行的。

envoy

Envoy 算是 keychain 的一個替代品,您可以從 官方軟件倉庫 下載安裝 envoy,或者從 AUR 安裝 envoy-gitAUR

安裝完成之后,使用以下命令啟用 envoy 套接字 (socket):

# systemctl enable envoy@ssh-agent.socket

加入您的外殼 rc 文件:

 envoy -t ssh-agent -a ssh_key
 source <(envoy -p)

如果您的私鑰為 ~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa,或者 ~/.ssh/identity,則不需要 -a ssh_key 參數。

利用 KDE 電子錢包存儲密碼短語並和 envoy 配合工作

如果您的密碼短語很長很復雜,那記憶起來是有點痛苦。您可以讓 KDE 電子錢包來為您記住密碼短語哦!

安裝位於 官方軟件倉庫 的 ksshaskpass 和 kdeutils-kwalletmanager[broken link: replaced by kwalletmanager],然后按照上文介紹的方法啟用 envoy 套接字。

添加一個腳本到 ~/.kde4/Autostart/,輸入以下內容:

~/.kde4/Autostart/ssh-agent.sh
#!/bin/sh
envoy -t ssh-agent -a ssh_key

記得加上可執行權限:

$ chmod +x ~/.kde4/Autostart/ssh-agent.sh

添加一個腳本到 ~/.kde4/env/,加入以下內容:

~/.kde4/env/ssh-agent.sh
#!/bin/sh
eval $(envoy -p)

同樣不要忘記加上可執行權限:

$ chmod +x ~/.kde4/env/ssh-agent.sh

當您登錄到 KDE 桌面環境時,它就會自動運行腳本 ssh-agent.sh。這樣子就能夠調用 ksshaskpass,當 {{ic|envoy} 調用 {{ic|ssh-agent} 時,{{ic|ksshaskpass} 就會請求您輸入 KDE 電子錢包的密碼了。而 KDE 電子錢包則會保存您的密碼短語,在 ssh-agent 需要的時候由 KDE 電子錢包提供。

pam_ssh

pam_ssh 項目為 SSH 私鑰提供了一個 插入式驗證模塊 (PAM)。當您的密碼短語與系統登錄用戶密碼相同的時候,可以為您減去再次輸入密碼的麻煩。開機登錄時,您需要輸入您的登錄密碼,如有需要,還要輸入 ssh 密鑰的密碼短語。您成功登錄系統之后,ssh-agent 則會在整個會話期間緩存您已解密的私鑰。

要在 tty 模式下使用 pam_ssh,您需要安裝位於 AUR 的 pam_sshAUR 。

注意: pam_ssh 2.0 要求所有用於認證的私鑰文件必須保存在  ~/.ssh/login-keys.d/ 下。

您可以為您的私鑰文件創建一個軟鏈接,並放到 ~/.ssh/login-keys.d/

$ mkdir ~/.ssh/login-keys.d/
$ cd ~/.ssh/login-keys.d/
$ ln -s ../id_rsa

注意將上述例子中的 id_rsa 換成您對應的私鑰文件。

編輯 /etc/pam.d/login,將下面例子中高亮加粗的那幾行加進去。請注意配置內容的順序會影響到登錄行為,應當按照例子中的來。

警告: PAM 配置丟失會導致系統中所有的用戶被鎖定。因此,您必須在保存任何 PAM 配置並生效之前,做好配置文件的備份,准備好一份 live CD,以防萬一用戶被鎖定時還有辦法恢復原樣。您可以參閱 IBM 的  這篇文章 詳細了解一下 PAM 的配置。
/etc/pam.d/login
#%PAM-1.0

auth       required     pam_securetty.so
auth       requisite    pam_nologin.so
auth       include      system-local-login
auth       optional     pam_ssh.so        try_first_pass
account    include      system-local-login
session    include      system-local-login
session    optional     pam_ssh.so

在上面的例子中,登錄認證初始化進程如平常那樣啟動,用戶要輸入登錄密碼。try_first_pass 選項傳遞給 pam_ssh 模塊,它會嘗試使用用戶密碼作為密碼短語去解密 ~/.ssh/login-keys.d/ 下的私鑰。如果用戶密碼與密碼短語一致,那么私鑰可以被解密,用戶就無需再次輸入相同的密碼。如果兩者不同,ssh_pam 模塊會在用戶正確輸入登錄密碼之后輸入密碼短語。optional 可以保證 ~/.ssh/login-keys.d/ 下沒有私鑰時,用戶也能夠正常登錄系統。這種情況下,ssh_pam 模塊對於沒有私鑰的用戶來說就等於無。

如果您使用其他方式登錄,比如使用登錄管理器 SLiM (簡體中文) 或者 XDM (簡體中文),您必須按照類似的方法來編輯 PAM 配置文件,才能正常工作。/etc/pam.d/ 目錄下保存有默認的配置文件,您可以參考默認配置文件來進行配置。

pam_ssh 已知問題

pam_ssh 並不廣泛使用,其提供的文檔也比較少。您應該注意一下該軟件包的一些使用限制,比如:

  • pam_ssh < 2.0 不支持 ECDSA,您必須使用 RSA 或者 DSA。
  • pam_ssh 調用的 ssh-agent 進程僅限於當前會話,不能在多個會話中共享。上文提到的 keychain 前端可以避免這個問題。

GNOME Keyring

如果您使用 Gnome,您也可以使用 Gnome 鑰匙圈 (GNOME Keyring) 作為 SSH agent。詳情請參考 GNOME Keyring

疑難排解

如果您的 SSH 服務器忽略了您的 SSH 密鑰對,您需要檢查一下相關文件的權限是否正確。

本地機器上:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

服務器上:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

如果這樣還不能解決您的問題,您可以試試將 sshd_config 中的 StrictModes 設為 no。如果將 StrictModes 關閉就能夠順利認證的話,說明相關文件的權限還沒有改對。

小貼士: 為保證安全,記得把  StrictModes 設為  yes

請確認您的 SSH 服務器支持您所使用的密鑰類型, 可以實施 RSA 或者 DSA。某些服務器可能不支持 ECDSA 密鑰。

如果還不行,打開 sshd 的 debug 模式,查看連接時的日志輸出,查找原因吧:

# /usr/bin/sshd -d

使用 kdm

KDM 並不能直接啟動 ssh-agent,KDM 要用 kde-agent[broken link: package not found] 來啟動 ssh-agent,但是 kde-agent 自 20140102-1 開始已經被 移除

為了讓 KDE 啟動時啟動 ssh-agent,您可以創建一個腳本用於登錄時啟動 ssh-agent,還有一個腳本用於注銷時殺死進程:

echo -e '#!/bin/sh\n[ -n "$SSH_AGENT_PID" ] || eval "$(ssh-agent -s)"' > ~/.kde4/env/ssh-agent-startup.sh
echo -e '#!/bin/sh\n[ -z "$SSH_AGENT_PID" ] || eval "$(ssh-agent -k)"' > ~/.kde4/shutdown/ssh-agent-shutdown.sh
chmod 755 ~/.kde4/env/ssh-agent-startup.sh ~/.kde4/shutdown/ssh-agent-shutdown.sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM