ป้อนวลีรหัสผ่าน SSH หนึ่งครั้ง


124

ก่อนทำการอัพเกรด

เมื่อฉันใช้git clone git@...(ใช้ ssh) หนึ่งครั้งต่อคอมพิวเตอร์รีสตาร์ทกล่องโต้ตอบหน้าต่างปรากฏขึ้นพร้อมกล่องข้อความสำหรับใส่ข้อความรหัสผ่าน SSH ของฉันและยืนยันด้วยตกลง จากนั้นวลีรหัสผ่านก็ไม่จำเป็นอีกต่อไปจนกว่าจะเริ่มระบบของฉันต่อไป

หลังจากอัปเกรดเป็น 13.10

หลังจากอัปเกรดเป็น Ubuntu 13.10 หน้าต่างนั้นจะไม่ปรากฏอีกต่อไป แต่มีข้อความในเทอร์มินัลปรากฏขึ้น:

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

... ทุกครั้งที่มีการโคลนที่เก็บ git

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันต้องการป้อนข้อความรหัสผ่านเพียงครั้งเดียว


1
ฉันคิดว่าคุณต้องใช้ssh-addคำสั่งสำหรับสิ่งนั้น คุณเคยลองไหม
devius

2
ฉันพยายาม+ssh-agent bash ssh-addใช้งานได้เพียงไม่กี่นาที
IonicăBizău

ฉันมีปัญหาเดียวกันหลังจากทั้งหมด ฉันคิดว่ามันอาจเป็นความขัดแย้งระหว่างตัวแทน SSSS กับ Gnome Keyring Daemon
devius

1
ข้อผิดพลาดที่เกี่ยวข้อง: bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169
devius

2
เพิ่มAddKeysToAgent yesไปที่. ssh / config ใช้งานได้สำหรับฉัน
xslittlegrass

คำตอบ:


138

อัปเดต: ดูเหมือนว่าจะเป็นข้อบกพร่องจาก 13.10:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169


อย่างไรก็ตามการรันคำสั่งต่อไปนี้ปัญหาได้รับการแก้ไขแล้วสำหรับฉัน:

วิธีแก้ไข

ฉันแก้ไขสิ่งนี้โดยป้อนคำสั่งต่อไปนี้:

$ ssh-agent bash

สิ่งนี้จะสร้างกระบวนการทุบตีใหม่ที่ช่วยให้คุณสามารถเพิ่มกุญแจส่วนตัวได้ เมื่อเพิ่มรหัสส่วนตัวใหม่คุณจะได้รับแจ้งให้ป้อนข้อความรหัสผ่านเพียงครั้งเดียว

แล้ว:

$ 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)

... usernameชื่อผู้ใช้ของคุณอยู่ที่ไหน คุณสามารถทำเช่นเดียวกันโดยใช้$USERตัวแปร:

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

หรือเพียงแค่ใช้~สำหรับไดเรกทอรีบ้านของคุณ

$ ssh-add ~/.ssh/id_rsa

และปัญหาได้รับการแก้ไข


47
มันไม่ได้แก้ปัญหาเลย มันจะเพิ่มตัวตนให้กับตัวแทนจนกว่าคุณจะออกจากเทอร์มินัล ถ้าคุณเปิดเทอร์มินัลใหม่คุณต้องทำssh-addอีกครั้ง
devius

@devius ใช่ดูเหมือนว่าจะเป็นข้อผิดพลาด แต่คำสั่งดังกล่าวข้างต้นได้รับการแก้ไขปัญหาของฉัน ...
Ionica Bizău

3
ดังนั้นเพื่อชี้แจง: ด้วย "แก้ไข" นี้คุณจะไม่ต้องพิมพ์ข้อความรหัสผ่านในเทอร์มินัลนั้นอีกครั้ง ทันทีที่คุณเปิดเทอร์มินัลใหม่ - คุณจะต้องให้ข้อความรหัสผ่านอีกครั้ง
Harijay

9
ฉันพยายาม$ ssh-add /home/username/.ssh/id_rsa(ไม่ใช้ssh-agent bash) และมันก็ใช้ได้ผลสำหรับฉันแม้หลังจากเปิดเครื่องอีกครั้ง แต่ทางออกที่สมบูรณ์สำหรับฉันคือstackoverflow.com/a/4246809/532252 อันนี้ ทุกอย่างก็โอเคแม้หลังจากรีบูตเครื่อง
kishie

1
ฉันเพิ่งพิมพ์ ssh-add ใน terminal ไม่จำเป็นต้องเปลี่ยนไปใช้
bsh ของ

39

0) คำตอบสั้น ๆ

เพิ่มใน.ssh/configหนึ่งบรรทัดที่จุดเริ่มต้น:

AddKeysToAgent yes

และเรียกใช้ git / ssh / ... หากยังไม่เพียงพอให้ตรวจสอบรุ่น ssh ของคุณและตรวจสอบว่ามีการโหลด ssh-agent ด้วยคำแนะนำเหล่านี้:

1) ตรวจสอบรุ่น openssh

ก่อนอื่นตรวจสอบว่าเวอร์ชั่น ssh ของคุณจะต้องมากกว่า 7.2 :

ssh -V

2) แก้ไขไฟล์กำหนดค่า

หากเป็นเช่นนั้นเพียงเพิ่มใน.ssh/configบรรทัดเดียวของคุณในตอนต้น:

AddKeysToAgent yes

3) ตรวจสอบว่าตัวแทน ssh เปิดอยู่แล้ว

การแจกแจงมักจะโหลด ssh-agent โดยอัตโนมัติ เพื่อตรวจสอบเรียกใช้

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

หากคุณไม่เห็นบรรทัดใด ๆ ที่มีอยู่คุณจะต้องโหลดโดยเรียกใช้:

eval $(ssh-agent)

โปรดทราบว่าสิ่งนี้จะเปิดใช้งานเอเจนต์ในเทอร์มินัลปัจจุบันเท่านั้นดังนั้นเพื่อเปิดใช้งานได้ทุกที่คุณสามารถลองเพิ่มบรรทัดนี้ใน~/.profileไฟล์และรีบูตได้


11
AddKeysToAgent yesเป็นที่ยอมรับคำตอบโพสต์ 2016 - และว่าสิ่งที่ผู้ใช้ส่วนใหญ่ที่ทันสมัยมี grepping เกี่ยวกับ กลางปี ​​2560 Ubuntu> = 16.04 ( Xenial Xerus ) เป็นข้อสมมติที่สมเหตุสมผล การติดตั้ง OpenSSH ส่วนใหญ่ใน wild นั้นรองรับตัวเลือกนี้แล้ว Ad-hoc kludges เชลล์สคริปต์ของการจัดเรียงสนับสนุนโดยทุกคำตอบอื่น ๆ คำถามนี้จึง ... กุญแจ </sigh>
เซซิลแกงกะหรี่

2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ
พูดที่

32

เอกสาร Atlassian นี้แก้ไขปัญหาสำหรับฉันใน Ubuntu 14.04 Server Edition:

เพียงเพิ่มค่านี้ลงใน.bashrcไฟล์ของคุณ:

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

และหลังจากเข้าสู่ระบบก็จะขอรหัสผ่านเพียงครั้งเดียวและมันจะแคช คุณไม่จำเป็นต้องใส่มันทุกครั้ง


2
ดูเหมือนว่าจะทำงานกับ distros อื่น ๆ เช่นฉันเพิ่งใช้คำตอบนี้ใน Sabayon Linux
BH2017

1
ขอบคุณ! วิธีนี้ใช้ได้กับฉันในระบบ Ubuntu ที่ gnome-keyring-daemon ไม่ทำงานเนื่องจากปัญหา dbus-daemon โดยเฉพาะฉันได้รับข้อผิดพลาดเหล่านี้ "** ข้อความ: ไม่สามารถเชื่อมต่อกับบัสเซสชัน dbus: ไม่สามารถเปิดใช้งาน dbus-daemon โดยไม่ต้องใช้ $ DISPLAY สำหรับ X11" และหลังจากตั้งค่าตัวแปรสภาพแวดล้อมการแสดงผลที่ฉันได้รับ "** ข้อความ: ไม่สามารถ ไม่เชื่อมต่อกับเซสชันบัส dbus: // bin / dbus-launch ถูกยกเลิกอย่างผิดปกติโดยมีข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด Autolaunch: การเริ่มต้น X11 ล้มเหลว "
user207863

1
สิ่งนี้ต้องการ upvotes มากขึ้นแก้ไขปัญหาในการปรับแต่ง Ubuntu 16.04 แบบเสมือน
Niels Keurentjes

3
วิธีนี้ช่วยแก้ไขปัญหาสำหรับฉันใน Bash สำหรับ Windows เช่นกัน ฉันพยายามเปิดตัว Bash หลายครั้งและมันก็จำข้อความรหัสผ่านได้ ยังไม่ได้ลองรีสตาร์ทเลย
Amr

2
หลังจากลองใช้วิธีแก้ปัญหาอื่นทั้งหมดแล้วสิ่งนี้ก็ใช้ได้กับฉัน นี่ควรเป็นทางออกของ OP
João Pimentel Ferreira

20

วิธีแก้ปัญหาสำหรับข้อผิดพลาดนี้คือการเพิ่มสิ่งต่อไปนี้ที่ด้านล่างของ~/.bashrc

eval `gnome-keyring-daemon --start`

2
ไม่ควรที่พวงกุญแจ gnome เป็นส่วนหนึ่งของเซสชันของคุณใช่ไหม
Pavel Šimerda

1
หากคุณกำลังพูดถึง 'ควร' ดังนั้นคำถามนี้ไม่ควรอยู่ที่นี่เป็นครั้งแรกถ้าทุกอย่างสมบูรณ์แบบ
Anwar

1
.bashrcไม่แน่ใจว่านี้เป็นของ ดูเหมือนว่าคุณจะต้องเพิ่มลงในไฟล์โปรไฟล์ DE บางไฟล์
Dmitry Ginzburg

3

ผู้ใช้งานของเชลล์ปลาสามารถใช้สคริปต์นี้เพื่อทำสิ่งเดียวกัน

# 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

ฉันใช้สิ่งนี้:

vim ~/.profile

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

0

หากคุณใช้ไฟล์ azure .ppk

เพียงแปลงเป็น pem และเพิ่มสิทธิ์ 400 ด้วยขั้นตอนง่าย ๆ :

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

บน Ubuntu 18.04 ssh-agent เริ่มต้นขึ้นเมื่อเปิดเซสชัน X มันถูกจัดการในไฟล์ /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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.