Nhập cụm mật khẩu SSH một lần


124

Trước khi nâng cấp

Khi tôi đang chạy git clone git@...(sử dụng ssh) một lần trên mỗi máy tính khởi động lại một hộp thoại cửa sổ xuất hiện chứa một hộp văn bản để chèn cụm mật khẩu SSH của tôi và được xác nhận với OK. Sau đó, cụm mật khẩu không còn cần thiết cho đến khi bắt đầu tiếp theo hệ thống của tôi.

Sau khi nâng cấp lên 13.10

Sau khi nâng cấp lên Ubuntu 13.10, cửa sổ đó không xuất hiện nữa nhưng thông báo trong thiết bị đầu cuối xuất hiện:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

... Mỗi khi nhân bản một kho lưu trữ git, nó sẽ xuất hiện.

Làm thế nào tôi có thể sửa lỗi này? Tôi muốn nhập cụm mật khẩu của mình chỉ một lần.


1
Tôi nghĩ rằng bạn phải sử dụng ssh-addlệnh cho điều đó. Bạn đã thử chưa?
devius

2
Tôi đã thử ssh-agent bash+ ssh-add. Điều đó chỉ hoạt động trong vài phút.
Ionică Bizău

Rốt cuộc tôi cũng gặp vấn đề tương tự. Tôi nghĩ rằng nó có thể là một cuộc xung đột giữa tác nhân ssh của OpenSSH và Daemon của Gnome.
devius


2
Thêm AddKeysToAgent yesvào .ssh / config hoạt động với tôi.
xslittlegrass

Câu trả lời:


138

Cập nhật: dường như là một lỗi từ ngày 13.10:

https://bugs.launchpad.net/ubfox/+source/libpam-ssh/+orms/1247169


Dù sao chạy các lệnh sau, sự cố đã được khắc phục cho tôi:

Làm thế nào để khắc phục

Tôi đã sửa lỗi này bằng cách nhập các lệnh sau:

$ ssh-agent bash

Điều này tạo ra một quy trình bash mới cho phép bạn thêm khóa riêng. Khi thêm khóa riêng mới, bạn sẽ được nhắc nhập cụm mật khẩu một lần và chỉ một lần.

Và sau đó:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

... usernameTên người dùng của bạn ở đâu . Bạn có thể làm tương tự bằng cách sử dụng $USERbiến:

$ ssh-add /home/$USER/.ssh/id_rsa

Ngoài ra, chỉ cần sử dụng ~cho thư mục nhà của bạn.

$ ssh-add ~/.ssh/id_rsa

Và vấn đề đã được khắc phục.


48
Điều này không giải quyết vấn đề gì cả. Nó chỉ thêm danh tính cho tác nhân cho đến khi bạn thoát ra khỏi thiết bị đầu cuối. Nếu bạn mở một thiết bị đầu cuối mới, bạn phải ssh-addmột lần nữa.
devius 11/11/13

@devius Vâng, dường như là một lỗi. Nhưng, các lệnh trên đã khắc phục vấn đề của tôi ...
Ionică Bizău

3
Vì vậy, để làm rõ: Với "sửa chữa" này, bạn sẽ không phải gõ lại cụm mật khẩu trong thiết bị đầu cuối đó nữa. Khoảnh khắc bạn mở một thiết bị đầu cuối mới - bạn sẽ phải cung cấp cụm mật khẩu một lần nữa.
harijay

9
Tôi đã thử $ ssh-add /home/username/.ssh/id_rsa(không có ssh-agent bash) và nó hoạt động với tôi ngay cả sau khi mở lại thiết bị đầu cuối. Nhưng giải pháp hoàn chỉnh cho tôi là một stackoverflow.com/a/4246809/532252 . Mọi thứ đều ổn ngay cả sau khi khởi động lại máy.
kishie

1
Tôi vừa gõ ssh-add trong terminal. Không cần phải chuyển sang bash ssh-agent hoặc chỉ định tệp id_rsa
henry74

39

0) Câu trả lời ngắn

Thêm vào .ssh/configmột dòng của bạn ở đầu:

AddKeysToAgent yes

và chạy git / ssh / ... Nếu không đủ, hãy kiểm tra phiên bản ssh của bạn và kiểm tra xem ssh-agent có được tải theo các hướng dẫn sau không:

1) Kiểm tra phiên bản openssh

Trước tiên hãy kiểm tra xem phiên bản ssh của bạn, nó phải lớn hơn bằng 7.2 :

ssh -V

2) Chỉnh sửa tập tin cấu hình

Nếu đó là trường hợp chỉ cần thêm vào .ssh/configmột dòng của bạn ở đầu:

AddKeysToAgent yes

3) Kiểm tra xem ssh-agent đã mở chưa

Thông thường các bản phân phối tự động tải một tác nhân ssh. Để kiểm tra nó, hãy chạy

ps aux | grep -v grep | grep ssh-agent

Nếu bạn không thấy bất kỳ dòng nào chứa nó, bạn cần tải nó bằng cách chạy:

eval $(ssh-agent)

Lưu ý rằng điều này chỉ kích hoạt tác nhân trên thiết bị đầu cuối hiện tại, vì vậy để kích hoạt nó ở mọi nơi, bạn có thể thử thêm dòng này vào ~/.profiletệp của mình và khởi động lại.


11
AddKeysToAgent yeslà câu trả lời chính thức sau năm 2016 - và chính xác là những gì người dùng hiện đại nhất đang nói về. Đó là giữa năm 2017. Ubuntu> = 16.04 ( Xenial Xerus ) hiện là một giả định hợp lý. Hầu hết các cài đặt OpenSSH trong tự nhiên hiện hỗ trợ tùy chọn này. Kịch bản shell ad-hoc loại bỏ các loại được ủng hộ bởi mọi câu trả lời khác cho câu hỏi này là rất ... passé . </sigh>
Cecil Curry

2
Đây phải là câu trả lời được chấp nhận
simernes

32

Tài liệu Atlassian này đã khắc phục sự cố cho tôi trên Ubuntu 14.04 Server Edition:

Chỉ cần thêm giá trị này vào .bashrctệp của bạn :

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

Và sau khi đăng nhập, nó chỉ hỏi mật khẩu một lần và nó lưu lại. Bạn không cần phải nhập nó mỗi lần.


2
Điều này dường như hoạt động trên các bản phát hành khác, như tôi vừa sử dụng thành công câu trả lời này trên Sabayon Linux.
BH2017

1
Cảm ơn! Giải pháp này hoạt động với tôi trên một hệ thống Ubuntu, nơi gnome-keyring-daemon không hoạt động vì các vấn đề về dbus-daemon. Cụ thể, tôi đã gặp phải những lỗi này "** Tin nhắn: không thể kết nối với bus phiên dbus: Không thể tự động kích hoạt một dbus-daemon mà không có $ HIỂN THỊ cho X11" và sau khi đặt biến môi trường hiển thị tôi nhận được "** Tin nhắn: không thể 't kết nối với bus phiên dbus: // bin / dbus-launch bị chấm dứt bất thường với lỗi sau: Lỗi tự động: Lỗi khởi tạo X11 không thành công. "
dùng207863

1
Điều này cần nhiều upvote hơn, khắc phục sự cố trên Ubuntu 16.04 ảo.
Niels Keurentjes

3
Điều này cũng khắc phục sự cố cho tôi trên Bash cho Windows. Tôi đã thử khởi chạy Bash nhiều lần và nó nhớ cụm mật khẩu. Chưa thử khởi động lại.
Amr

2
Sau khi thử tất cả các giải pháp khác, điều này làm việc cho tôi. Đây sẽ là giải pháp cho OP
João Pimentel Ferreira

20

Một cách giải quyết cho lỗi này là thêm phần sau vào dưới cùng của~/.bashrc

eval `gnome-keyring-daemon --start`

2
Không nên khóa keynome chỉ là một phần của phiên của bạn?
Pavel imerda

1
Nếu bạn đang nói về 'nên', thì câu hỏi này không nên ở đây ngay từ đầu, nếu mọi thứ đều hoàn hảo
Anwar

1
Không chắc chắn nếu điều này thuộc về .bashrc. Có vẻ như bạn phải thêm nó vào một số tệp hồ sơ DE
Dmitry Ginzburg

3

Người dùng vỏ cá có thể sử dụng tập lệnh này để làm điều tương tự.

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end

0

Tôi sử dụng cái này:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO

0

Nếu bạn sử dụng tập tin azure .ppk

Chỉ cần chuyển đổi nó thành pem và thêm quyền 400 với các bước đơn giản:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>

0

Trên Ubuntu 18.04, ssh-agent được khởi động khi phiên X được mở, nó được quản lý trong tệp /etc/X11/Xsession.options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.