Ssh

SSH + 證書頒發機構伺服器?

  • March 1, 2018

是否可以設置 SSH(例如通過 pam)來檢查連接客戶端的公鑰與 CA 伺服器?我嘗試過使用 gnupg (via gpg-agent --daemon --enable-ssh-support),也嘗試過使用 OpenCA,這被證明是安裝的一個挑戰。此外,當涉及到這兩個方面時,文件都是可怕的。

我想要完成的事情是:

$$ Client $$–SSH–> “伺服器” <—>$$ CA Server $$

整個平台是基於 *nix 的,我現在對建議持開放態度,因為我已經堅持了一段時間了。

GnuPG

我已經按照這些指南盡可能簡單地進行了設置:

我最初的想法是建立我自己的“密鑰伺服器”,它gpg可以發送和檢查密鑰,但是沒有關於這個的資訊(或者至少我找不到)。

據我了解,我應該能夠ssh-add -l列出我所有的密鑰,但這給了我:The agent has no identities.這並不奇怪,因為我從未指定在哪裡獲取它們,但“它應該可以工作”(…?) .

gpg.conf看起來像:

... lots of default ...
personal-digest-preferences SHA512
cert-digest-algo SHA512
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
homedir /etc/gnupg
use-agent

和我的gpg-agent.conf

pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 10800
default-cache-ttl-ssh 10800
write-env-file /etc/gnupg/.gpg-agent-info
enable-ssh-support

只是為了驗證我確實有一個密鑰並且 gpg 正在響應:

~]# gpg --list-keys
/etc/gnupg/pubring.gpg
----------------------
pub    4096R/#######2 2013-12-10 [expired: 2014-12-10]
uid                   Anton (...) &lt;mail&gt;
sub    4096R/#######5 2013-12-10 [expires: 2014-12-10]

開放CA

當一切都準備就緒並開始時,我進入了一個網站,上面說我的“對稱密鑰長度太短”,我無法超越。

我知道這是一個非常古老的問題。但是,您的問題有兩個答案。

讓 GPG 與 SSH 一起工作。

您已經完成了第一步,在 gpg-agent.conf 中啟用了 ssh-support

但是,您沒有提供任何要使用的 PGP 密鑰。為了在 ssh 中使用 PGP 密鑰,您必須以 ssh 格式導出公鑰並將其添加到遠端主機的 ~/.ssh/authorized_keys 文件中。然後將私鑰的 keygrip 添加到文件 ~/.gnupg/sshcontrol 中。

要將 PGP 公鑰導出為 ssh:

$gpg -a --export-ssh-key [keyid]

查看 PGP 密鑰: $gpg –with-keygrip –list-secret-keys

$$ keyid $$ 我通常會創建一個適合與 SSH 一起使用的子密鑰。如果您使用的是 GPG 2.2.1,那麼您甚至可以使用 ED25519。

$gpg --expert --edit-key [keyid]
   gpg&gt; addkey
       Option 11 for ECC
       Option A to add authentication
       Option 1 for Curve 25519
       Expire never
       Create yes
   gpg&gt; save

然後只導出身份驗證子密鑰:

$gpg -a --export-ssh-key [auth subkeyid]!

驚嘆號僅選擇指示的子項。

您還需要確保在 ~/.bashrc 中設置了環境變數…如果您正在執行 Xwindow 客戶端,這通常通過 /etc//X11/Xsession.d/90gpg-agent 為您完成以下 bash 腳本:

agent_sock=$(gpgconf --list-dirs agent-socket)
export GPG_AGENT_INFO=${agent_sock}:0:1
if [ -n "$(gpgconf --list-options gpg-agent | \
     awk -F: '/^enable-ssh-support:/{ print $10 }')" ]; then
   export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
fi

一旦您確保設置了環境變數,當您列出可用身份時,添加到 ~/.gnupg/sshcontrol 文件中的任何 keygrip 都將顯示為 ssh-agent 中的身份驗證密鑰:

$ssh-add -l

請注意,您可以通過 -E 選項更改顯示的雜湊以顯示 MD5 或 SHA256。

配置 SSH 以使用證書

這是一個相當複雜的問題。Red Hat 在這裡有一個詳細的演練:

Redhat SSH CA 教程

結尾

目前還不清楚是否可以使用 PGP 密鑰作為 SSH CA 密鑰。我自己沒試過。但是,我確實在客戶端使用 PGP 密鑰。我發現與使用 ssh-genkey 生成的密鑰相比,它使生活變得非常輕鬆,並且管理 SSH 身份也不那麼麻煩。

引用自:https://unix.stackexchange.com/questions/104669