天天看點

如何在Ubuntu上使用ssh-add永久添加私鑰? [關閉]

我有一個受密碼保護的私鑰,可以通過SSH通路伺服器。

我有2台linux(ubuntu 10.04)機器,ssh-add指令的行為在兩者中都不同。

在一台機器上,一旦我使用“ssh-add .ssh / identity”并輸入我的密碼,密鑰就會被永久添加,即每次關閉計算機并再次登入時,密鑰都已添加。

在另一個中,我必須在每次登入時添加密鑰。

據我記憶,我對兩者做了同樣的事情。 唯一的差別是密鑰是在永久添加的密鑰上建立的。

有誰知道如何永久地将它添加到其他機器?

#1樓

在Mac OS X Lion下,我沒有回答同樣的問題。 我最後補充說:

ssh-add ~/.ssh/id_rsa &>/dev/null
           

對我的.zshrc(但.profile也沒關系),這似乎修複了它。

(如此處所示: http : //geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )

#2樓

我嘗試了@Aaron的解決方案,它對我來說不太有用,因為每次我在終端上打開一個新标簽時它都會重新添加我的密鑰。 是以我稍微修改了一下(請注意,我的大多數密鑰也受密碼保護,是以我不能将輸出發送到/ dev / null):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi
           

這樣做是為了檢查特定鍵的

ssh-add -l

(列出已添加的所有鍵)的輸出,如果找不到,則将其添加到

ssh-add

現在我第一次打開終端時,我被要求輸入私鑰的密碼,直到我重新啟動(或登出 - 我沒有檢查)我的電腦才會再問。

由于我有一堆密鑰,我将

ssh-add -l

的輸出存儲在變量中以提高性能(至少我猜它可以提高性能:))

PS:我在linux上,這個代碼轉到我的

~/.bashrc

檔案 - 如果你在Mac OS X上,那麼我認為你應該把它添加到

.zshrc

.profile

編輯:正如評論所指出的@Aaron的

.zshrc

檔案從使用

zsh

殼-是以,如果你不使用(如果你不知道,那麼最有可能的,你正在使用

bash

代替) ,此代碼應該轉到

.bashrc

檔案。

#3樓

在我的情況下,解決方案是:

配置檔案的權限應為600.

chmod 600 config

正如上面的評論中提到的generalopinion

無需觸摸配置檔案内容。

#4樓

在Ubuntu 14.04上(可能更早,可能還在)你甚至不需要控制台:

  • 開始

    seahorse

    或發現你發現搜尋“關鍵”的東西
  • 在那裡建立一個SSH密鑰(或導入一個)
    • 無需将密碼留白
    • 它甚至可以将公鑰推送到伺服器(或更多)
  • 你最終會運作一個ssh-agent并加載這個密鑰,但是已鎖定
  • 使用

    ssh

    将通過代理擷取身份(即密鑰)
  • 在會話期間首次使用時,将檢查密碼短語
    • 并且您可以選擇在登入時自動解鎖密鑰
    • 這意味着登入身份驗證将用于包裝密鑰的密碼
  • 注意:如果您想轉發您的身份(即代理轉發),請使用

    -A

    調用您的

    ssh

    或将其設為預設值
    • 否則,您無法在稍後登入到第三台計算機的計算機上使用該密鑰進行身份驗證

#5樓

我通過在ssh-add中使用-K選項在Mac OSX(10.10)上解決了這個問題:

ssh-add -K ~/.ssh/your_private_key
           

對于macOS 10.12及更高版本,您需要另外編輯您的ssh配置,如下所述: https : //github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

#6樓

在“〜/ .bashrc”中添加以下行為我解決了這個問題。 我正在使用Ubuntu 14.04桌面。

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"
           

#7樓

非常簡單^ _ ^兩個步驟

1.yum安裝鑰匙串

2.添加以下代碼到.bash_profile

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
           

#8樓

隻需添加鑰匙串,如Ubuntu快速提示中所述, https://help.ubuntu.com/community/QuickTips

什麼

而不是不斷啟動ssh-agent和ssh-add,可以使用keychain來管理你的ssh密鑰。 要安裝鑰匙串,您隻需單擊此處,或使用Synaptic從指令行執行作業或apt-get。

指令行

安裝檔案的另一種方法是打開終端(Application-> Accessories-> Terminal)并輸入:

sudo apt-get install keychain
           

編輯檔案

然後,您應該将以下行添加到$ {HOME} /.bashrc或/etc/bash.bashrc:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
           

#9樓

我使用兩個id_rsa鍵運作Ubuntu。 (一個人工作)。 ssh-add會記住一個密鑰(個人密鑰)并且每次忘記公司密鑰。

檢查兩者之間的差別,我看到我的個人密鑰有400個權利,而公司有600個權利。 (有你+ w)。 從公司密鑰(uw或設定為400)中删除使用者寫權限解決了我的問題。 ssh-add現在可以記住這兩個鍵。

#10樓

解決方案是通過在

~/.ssh/config

檔案中添加密鑰檔案來強制永久儲存密鑰檔案:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer
           

如果〜/ .ssh目錄中沒有'config'檔案,那麼你應該建立一個。 它不需要root權限,是以簡單地說:

nano ~/.ssh/config
           

...并根據您的要求輸入上面的行。

為此,檔案需要有chmod 600.您可以使用指令

chmod 600 ~/.ssh/config

如果您希望計算機上的所有使用者都使用密鑰,請将這些行放入

/etc/ssh/ssh_config

,并将密鑰放在所有人都可以通路的檔案夾中。

此外,如果要設定特定于一個主機的密鑰,可以在〜/ .ssh / config中執行以下操作:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey
           

當您有許多身份,伺服器不拒絕您,因為您首先嘗試了錯誤的身份時,這具有優勢。 隻會嘗試特定的身份。

#11樓

這對我有用。

ssh-agent /bin/sh
ssh-add /path/to/your/key
           

#12樓

對于使用Fish shell的使用者,可以使用以下函數,然後在〜/ .config / fish / config.fish中調用它。 它會将以id_rsa開頭的所有鍵加載到

ssh-agent

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys
           

如果您想在打開終端時自動啟動

ssh-agent

,可以使用tuvistavie / fish-ssh-agent來執行此操作。

#13樓

我在Ubuntu 16.04上遇到了同樣的問題:一些密鑰是永久添加的,對于其他人我必須在每個會話上執行

ssh-add

。 我發現永久添加的密鑰都有私鑰和公鑰,位于

~/.ssh

,每個會話中忘記的密鑰隻有

~/.ssh

目錄中的

~/.ssh

。 是以,解決方法很簡單:你應該複制私人和公共密鑰

~/.ssh

執行前

ssh-add