Tôi đã nhân bản kho git của tôi qua ssh. Vì vậy, mỗi lần tôi liên lạc với chủ gốc bằng cách đẩy hoặc kéo, tôi phải nhập lại mật khẩu của mình. Làm cách nào tôi có thể định cấu hình git để không cần nhập mật khẩu nhiều lần?
Tôi đã nhân bản kho git của tôi qua ssh. Vì vậy, mỗi lần tôi liên lạc với chủ gốc bằng cách đẩy hoặc kéo, tôi phải nhập lại mật khẩu của mình. Làm cách nào tôi có thể định cấu hình git để không cần nhập mật khẩu nhiều lần?
Câu trả lời:
ssh-add
, bạn cần ssh-agent
được chạy và giữ khóa riêng của bạn(Ok, trả lời câu hỏi đã cập nhật, trước tiên bạn chạy ssh-keygen
để tạo khóa chung và khóa riêng như Jefromi đã giải thích . Bạn đặt khóa chung trên máy chủ. Bạn nên sử dụng cụm mật khẩu, nếu bạn không có từ tương đương -text mật khẩu trong khóa riêng của bạn. Nhưng khi bạn làm vậy, thì bạn cần một vấn đề thực tế ssh-agent
như được giải thích dưới đây.)
Bạn muốn chạy ssh-agent
trong nền khi bạn đăng nhập. Một khi bạn đăng nhập, ý tưởng là chạy ssh-add
một lần và chỉ một lần, để cung cấp cho tác nhân cụm mật khẩu của bạn, để giải mã khóa của bạn. Các đại lý sau đó chỉ ngồi trong bộ nhớ với khóa của bạn được mở khóa và tải, sẵn sàng để sử dụng mỗi khi bạn ssh ở đâu đó.
Tất cả các lệnh ssh-Family 1 sau đó sẽ tham khảo ý kiến của đại lý và tự động có thể sử dụng khóa riêng của bạn.
Trên các hệ thống OSX (err, macOS ), Gnome và KDE, ssh-agent
thường được khởi chạy tự động cho bạn. Tôi sẽ đi qua các chi tiết trong trường hợp, giống như tôi, bạn cũng có một môi trường Cygwin hoặc các cửa sổ khác, nơi điều này chắc chắn không được thực hiện cho bạn.
Bắt đầu ở đây : man ssh-agent
.
Có nhiều cách khác nhau để tự động chạy các đại lý. Như trang hướng dẫn giải thích, bạn có thể chạy nó để nó là cha mẹ của tất cả các quy trình khác của phiên đăng nhập của bạn. Bằng cách đó, các biến môi trường mà nó cung cấp sẽ tự động nằm trong tất cả các shell của bạn. Khi bạn (sau này) gọi ssh-add
hoặc ssh
cả hai sẽ có quyền truy cập vào tác nhân bởi vì tất cả chúng đều có các biến môi trường với tên đường dẫn ổ cắm ma thuật hoặc bất cứ điều gì.
Ngoài ra, bạn có thể chạy tác nhân như một đứa trẻ bình thường, lưu cài đặt môi trường trong một tệp và nguồn tệp đó trong mọi shell khi nó khởi động.
Hệ thống OSX và Ubuntu của tôi tự động thực hiện cài đặt khởi chạy tác nhân, vì vậy tất cả những gì tôi phải làm là chạy ssh-add
một lần. Hãy thử chạy ssh-add
và xem nếu nó hoạt động, nếu vậy, sau đó bạn chỉ cần làm điều đó một lần cho mỗi lần khởi động lại.
Hệ thống Cygwin của tôi cần nó được thực hiện thủ công, vì vậy tôi đã làm điều này trong tôi .profile
và tôi có .bashrc
nguồn .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
Tập .agent
tin được tạo tự động bởi tập lệnh; nó chứa các định nghĩa biến môi trường và xuất khẩu. Ở trên cố gắng tìm nguồn tệp .agent, sau đó thử đến ps(1)
tác nhân. Nếu nó không hoạt động, nó khởi động một tác nhân và tạo một tệp tác nhân mới. Bạn cũng có thể chạy ssh-add
và nếu nó không khởi động một tác nhân.
sudo
với phần mở rộng pam đúng.
ssh-agent
nó có thể gọn gàng hơn để sử dụng:eval `ssh-agent`
Có một vấn đề tương tự với GitHub vì tôi đang sử dụng giao thức HTTPS. Để kiểm tra giao thức nào bạn đang sử dụng chỉ cần chạy
git config -l
và nhìn vào dòng bắt đầu với remote.origin.url
. Để chuyển đổi giao thức của bạn
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
lỗi.
git remote set-url origin git@github.com:your_username/your_project.git
Đây là về cấu hình ssh, không phải git. Nếu bạn chưa có, bạn nên sử dụng ssh-keygen
(với cụm mật khẩu trống) để tạo một cặp khóa. Sau đó, bạn sao chép khóa chung vào đích từ xa ssh-copy-id
. Trừ khi bạn có nhu cầu về nhiều khóa (ví dụ: khóa an toàn hơn với cụm mật khẩu cho các mục đích khác) hoặc bạn có một số nội dung đa danh tính thực sự kỳ lạ đang diễn ra, thật đơn giản:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
Chỉnh sửa: Bạn thực sự chỉ nên đọc câu trả lời của DigitalRoss, nhưng: nếu bạn sử dụng các khóa có cụm mật khẩu, bạn sẽ cần sử dụng ssh-add <key-file>
để thêm chúng vào ssh-agent
(và rõ ràng là bắt đầu ssh-agent
nếu bản phân phối của bạn không có sẵn cho bạn).
ssh-agent
, vì anh ta muốn bỏ qua vấn đề nhập mật khẩu mọi lúc. Không hạ thấp nhưng tôi nghĩ bạn cần cải thiện câu trả lời này, trừ khi tôi là người hiểu lầm ...
ssh-agent
. +1 cho bạn!
ssh-*
gọi cụm mật khẩu cần thiết để sử dụng khóa - nơi bạn thực sự có nghĩa là mật khẩu người dùng thực sự của bạn trên điều khiển từ xa?
Nếu bạn đã nhân bản bằng HTTPS (được khuyến nghị) thì: -
git config --global credential.helper cache
và sau đó
git config --global credential.helper 'cache --timeout=2592000'
thời gian chờ = 2592000 (30 ngày tính bằng giây) để bật bộ đệm trong 30 ngày (hoặc bất kỳ bộ nào bạn muốn).
Bây giờ hãy chạy một lệnh git đơn giản yêu cầu tên người dùng và mật khẩu của bạn.
Nhập thông tin đăng nhập của bạn một lần và bây giờ bộ nhớ đệm được bật trong 30 ngày.
Hãy thử lại với bất kỳ lệnh git nào và bây giờ bạn không cần bất kỳ thông tin xác thực nào.
Để biết thêm thông tin: - Lưu mật khẩu GitHub của bạn trong Git
Lưu ý : Bạn cần Git 1.7.10 hoặc mới hơn để sử dụng trình trợ giúp thông tin xác thực. Khi khởi động lại hệ thống, chúng tôi có thể phải nhập lại mật khẩu.
Mở rộng suy nghĩ của Muein cho những người thích chỉnh sửa tệp trực tiếp hơn khi chạy các lệnh trong git-bash hoặc terminal.
Chuyển đến thư mục .git của dự án của bạn (gốc dự án trên máy cục bộ của bạn) và mở tệp 'config'. Sau đó tìm [remote "origin"] và đặt cấu hình url như sau:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
Tôi nghĩ có hai điều khác nhau ở đây. Đầu tiên là xác thực SSH thông thường yêu cầu người dùng đặt mật khẩu của tài khoản (trong đó mật khẩu tài khoản sẽ được xác thực theo các phương pháp khác nhau, tùy thuộc vào cấu hình sshd).
Bạn có thể tránh đặt mật khẩu đó bằng chứng chỉ. Với chứng chỉ bạn vẫn phải đặt mật khẩu, nhưng lần này là mật khẩu của khóa riêng của bạn (không phụ thuộc vào mật khẩu của tài khoản).
Để làm điều này, bạn có thể làm theo các hướng dẫn được chỉ ra bởi steveth45:
Với xác thực khóa công khai .
Nếu bạn muốn tránh đặt mật khẩu của chứng chỉ mỗi lần thì bạn có thể sử dụng ssh-agent, như được chỉ ra bởi DigitalRoss
Cách chính xác bạn làm điều này phụ thuộc vào Unix vs Windows, nhưng về cơ bản, bạn cần chạy ssh-agent trong nền khi bạn đăng nhập, và sau đó lần đầu tiên bạn đăng nhập, hãy chạy ssh-add để cung cấp cho tác nhân mật khẩu của bạn. Tất cả các lệnh ssh-Family sau đó sẽ tham khảo ý kiến của đại lý và tự động chọn cụm mật khẩu của bạn.
Bắt đầu ở đây: người đàn ông ssh-đại lý.
Vấn đề duy nhất của ssh-agent là, ít nhất, trên * nix, bạn phải đặt mật khẩu chứng chỉ trên mỗi shell mới. Và sau đó chứng chỉ được "tải" và bạn có thể sử dụng nó để xác thực với máy chủ ssh mà không cần đặt bất kỳ loại mật khẩu nào. Nhưng đây là trên vỏ đặc biệt.
Với móc khóa bạn có thể làm điều tương tự như ssh-agent nhưng "toàn hệ thống". Khi bạn bật máy tính, bạn mở một vỏ và đặt mật khẩu của chứng chỉ. Và sau đó, mọi shell khác sẽ sử dụng chứng chỉ "đã tải" đó và mật khẩu của bạn sẽ không bao giờ được hỏi lại cho đến khi bạn khởi động lại PC.
Gnome có một ứng dụng tương tự, được gọi là Gnome key , yêu cầu mật khẩu chứng chỉ của bạn vào lần đầu tiên bạn sử dụng và sau đó nó lưu trữ nó một cách an toàn để bạn sẽ không bị hỏi lại.
AddKeysToAgent yes
.ssh / config. Sau đó, nó được tải vào bộ nhớ cho đến khi bạn tắt máy tính
Nếu bạn đang sử dụng github, họ có một hướng dẫn rất hay giải thích rõ ràng hơn (ít nhất là với tôi).
ssh-keygen -t rsa
Khi được yêu cầu nhập cụm mật khẩu, hãy để trống, tức là chỉ cần nhấn enter. đơn giản vậy thôi!!
Hãy thử điều này từ hộp bạn đang đẩy từ
ssh git@github.com
Sau đó, bạn sẽ nhận được phản hồi chào mừng từ github và sẽ ổn để đẩy.
Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.
Nhưng bằng cách nào đó, git vẫn hỏi tôi mật khẩu khi tôi cố gắng đẩy
Tôi đã phải sao chép một git repo từ một máy chủ không cho phép đăng nhập khóa vie ssh mà chỉ với một người dùng / mật khẩu. Tôi không tìm thấy cách nào để định cấu hình Plugin Git để sử dụng kết hợp mật khẩu / người dùng đơn giản vì vậy tôi đã thêm lệnh shell sau đây là bước xây dựng trước trên máy xây dựng linux, phụ thuộc vào công cụ mong đợi (apt-get install Kỳ vọng):
ĐÂY KHÔNG PHẢI LÀ MỘT CÁCH TỐT CỦA GIẢI QUYẾT VẤN ĐỀ NÀY NHƯ MẬT KHẨU CỦA BẠN ĐƯỢC HIỂN THỊ NHƯ VĂN BẢN R IN RÀNG TRONG VIỆC XÁC NHẬN VÀ ĐĂNG NHẬP CÔNG VIỆC JENKIN! CHỈ SỬ DỤNG NẾU NẾU KHÔNG CÓ CÁCH XÁC NHẬN CẤP PHÉP RSA-KEY HOẶC CÁC KHẢ NĂNG XÁC NHẬN KHÁC!
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
Thêm một dòng AddKeysToAgent yes
trên đầu tệp .ssh / config. Đại lý ssh-agent phải được chạy trước. Nếu nó không chạy (kiểm tra bằng prep ssh-agent
), thì chỉ cần chạy nóeval $(ssh-agent)
Bây giờ, khóa được tải toàn hệ thống vào bộ nhớ và bạn không phải nhập lại cụm mật khẩu.
Nguồn gốc của giải pháp là https://askubfox.com/questions/362280/enter-ssh-passphrase-once/853578#853578
Tôi đã cố gắng tránh gõ cụm mật khẩu mọi lúc vì tôi đang sử dụng ssh trên windows. Những gì tôi đã làm là sửa đổi tệp .profile của mình để tôi nhập cụm mật khẩu của mình vào một phiên cụ thể. Vì vậy, đây là đoạn mã:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
vì vậy với điều này tôi gõ cụm mật khẩu của mình một lần trong một phiên ..
Tôi đã thử tất cả các đề xuất này và hơn thế nữa, để tôi có thể lấy bản sao từ ví dụ AWS của mình. Không có gì làm việc. Cuối cùng tôi đã lừa được sự tuyệt vọng: Tôi đã sao chép nội dung của id_rsa.pub trên máy cục bộ của mình và gắn nó vào ~ / .ssh / know_hosts trên ví dụ AWS của tôi.