Giả sử .ssh
thư mục của bạn chứa 30 khóa (15 khóa riêng tư và 15 khóa công khai).
Ở đâu trong Git, người ta có thể kiểm tra cái nào được sử dụng để kết nối với một kho lưu trữ từ xa nhất định?
Giả sử .ssh
thư mục của bạn chứa 30 khóa (15 khóa riêng tư và 15 khóa công khai).
Ở đâu trong Git, người ta có thể kiểm tra cái nào được sử dụng để kết nối với một kho lưu trữ từ xa nhất định?
Câu trả lời:
Mục nhập sau trong .ssh/config
tệp giải quyết vấn đề
host git.assembla.com
user git
identityfile ~/.ssh/whatever
Trong trường hợp ~/.ssh/whatever
là một đường dẫn đến khóa riêng của bạn
Ngoài ra, người dùng và máy chủ có thể được chọn từ
git push git@git.assembla.com:repo_name.git
^__ ^_______________
user host
Thực thi ssh ở chế độ tiết, hay còn gọi là ssh -v user@host
, sẽ in ra một lượng lớn thông tin gỡ lỗi, thông tin này cũng chứa thông tin chi tiết về tệp khóa mà nó đang cố gắng đăng nhập.
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Bây giờ nếu bạn kết hợp điều này, với Bước 4 trong trang trợ giúp SSH của chính Git , ssh -vT git@github.com
có thể cho bạn câu trả lời.
Lưu ý: Bạn cũng có thể sử dụng công -i
tắc để thông báo cho ssh trong quá trình thực thi lệnh, tệp khóa nào sẽ sử dụng.
ssh -vv user@host 2> >(grep Offering)
- điều này sẽ làm cho mọi thứ dễ dàng hơn. Tệp cuối cùng phải là khóa công khai. Ví dụ:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
github
không giống với git
.
Trừ khi nó được chỉ định trên .ssh/config
nó, nó sẽ sử dụng tệp khóa riêng mặc định.
Tệp mặc định là ~/.ssh/id_rsa
hoặc ~/.ssh/id_dsa
hoặc ~/.ssh/identity
tùy thuộc vào phiên bản giao thức.
Tôi muốn nói rằng thiết thực nhất đối với sở thích của tôi sẽ là:
GIT_SSH_COMMAND='ssh -v' git …
tất nhiên, tùy thuộc vào hoàn cảnh, chỉ cần xuất nó sang môi trường của SHELL hiện tại, bạn sẽ không phải thêm nó theo cách thủ công mỗi lần. Sau đó, nó sẽ là theo cách này:
export GIT_SSH_COMMAND='ssh -v'
git …
- Như man git
gợi ý rằng có một số biến môi trường sẽ ảnh hưởng đến hoạt động của Git khi sử dụng SSH. Theo man ssh
bạn, bạn có thể nhận được một số thông tin gỡ lỗi khi triển khai -v
tùy chọn (không chỉ mà còn, hãy xem hướng dẫn sử dụng nếu bạn muốn biết thêm).
phím nào được sử dụng?
Trong đầu ra, bạn sẽ thấy thông tin như…
debug1: Offering public key: …
… Đó là câu trả lời cho qn của bạn.
set GIT_SSH_COMMAND=ssh -v
. Điều này giúp tôi tìm ra rằng ssh-config Inlcude-Path phải giống như thế này trên windows: Include /C/Users/YourUserName.ssh/config
để tạo ssh và do đó git sử dụng tệp cấu hình sau đó sử dụng ví dụ một HOST *
mục nhập để chỉ định tệp nhận dạng mà git / ssh sử dụng.
Vì git
chỉ sử dụng ssh
để kết nối, nó sẽ sử dụng bất kỳ phím nào ssh
sẽ sử dụng để kết nối với máy chủ từ xa. Xem ~/.ssh/config
tập tin để biết chi tiết; các host
khối sử dụng IdentityFile
chỉ thị để xác định khóa riêng để sử dụng. Trang chủ ssh_config(5)
chứa đầy đủ chi tiết.
/etc/ssh/ssh_config
/etc/ssh_config
đó dường như là một tập tin đầy đủ các mục nhận xét
~/.ssh/config
tự tạo .
Điều này có thể là siêu lợi hại, nhưng sau khi chạy ssh -vT git@github.com
nó cho tôi thấy nó đang kiểm tra /root/.ssh
các phím, tôi đã mong đợi nó kiểm tra thư mục chính của tôi và sau đó tôi nhận ra rằng tôi đã đăng nhập với tư cách root!
ssh
cách thẩm vấn tương tự khác là những giải pháp chính xác. Cảm ơn.
Trên máy chủ từ xa, chỉnh sửa tệp sshd_config và thay đổi LogLevel từ INFO thành VERBOSE và khởi động lại ssh.
Bây giờ tệp nhật ký của bạn sẽ giữ dấu vân tay của khóa được sử dụng để xác thực từng người dùng.
Trên Ubuntu, các tệp này là:
/etc/ssh/sshd_config
/var/log/auth.log
nhưng chúng có thể khác nhau trên một bản phân phối khác. Chỉ cần google để biết vị trí của họ (một số sử dụng / var / log / secure chẳng hạn).