Chuyển các tùy chọn ssh sang git clone


103

Tôi đang cố gắng chạy git clonemà không cần ssh kiểm tra khóa của máy chủ lưu trữ. Tôi có thể làm điều đó từ ssh như thế:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

Có cách nào để chuyển các tùy chọn ssh tương tự sang lệnh git clone không?

Chỉnh sửa: Có một hạn chế mà tôi không thể sửa đổi ~/.ssh/confighoặc bất kỳ tệp nào khác trên máy đó.


2
Những gì bạn cố gắng làm là rất rủi ro và bạn có thể không nên làm điều đó. Vô hiệu hóa xác minh nếu danh tính của máy chủ SSH từ xa là một ý tưởng tồi trong hầu hết các tình huống. Bạn vô hiệu hóa hiệu quả tất cả các bảo mật đạt được thông qua việc sử dụng SSH và mở rộng bản thân trước các cuộc tấn công trung gian.
aef,

1
Trên thực tế, đây thường là chính xác những gì bạn muốn làm. Bạn có một repo nội bộ. Nếu ai đó đã tìm cách giả mạo điều đó, thì bạn đang gặp rắc rối. Nó không phải là "rất rủi ro" ở tất cả. Trong thực tế, bạn có thường xuyên kiểm tra khóa máy chủ lưu trữ ngoài băng tần không? (Anh nên).
Graham Nicholls

Câu trả lời:


47

Thêm chúng vào ~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

Các Hostentry là những gì bạn sẽ chỉ định trên dòng lệnh, và HostNamelà hostname đúng. Chúng có thể giống nhau hoặc Hostmục nhập có thể là một bí danh. Các Usermục được sử dụng nếu bạn không chỉ định user@trên dòng lệnh.

Nếu bạn phải cấu hình điều này trên dòng lệnh, hãy đặt GIT_SSHbiến môi trường trỏ đến một tập lệnh với các tùy chọn của bạn trong đó.


4
Tôi quên nói rằng tôi không thể sửa đổi bất kỳ tệp nào trên máy đó. Nếu không, giải pháp của bạn sẽ hoạt động.
Daniel

28
Sử dụng GIT_SSHbiến môi trường.
Josh Lee

151

Git 2.3 được phát hành gần đây hỗ trợ một biến mới "GIT_SSH_COMMAND" có thể được sử dụng để xác định lệnh CÓ tham số.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host

$GIT_SSH_COMMANDđược ưu tiên hơn $GIT_SSHvà được giải thích bởi shell, cho phép các đối số bổ sung được đưa vào.


Nên có dòng mới trước git clonehay mã có đúng không?
Tomáš Zato - Phục hồi Monica

7
Điều này phải chính xác, không có dòng mới, biến nên được đặt cho lệnh sau. Nếu bạn thêm một dòng mới, bạn sẽ cần xuất biến, sau đó biến đó cũng sẽ hoạt động.
Boris

Cảm ơn bạn, tôi đã bị mắc kẹt về điều này trong 2 ngày!
James Gentes

Booya! Cảm ơn bạn.
Jasper Blues

Tôi tin rằng nó sẽ không hoạt động với phiên bản git 1.9, có giải pháp thay thế nào cho git 1.9 không
lazarus

33

Một tùy chọn khác được thực hiện để chỉ định các khóa khác nhau là git config core.sshCommandvới git 2.10 + (Q3 2016).

Đây là một thay thế cho biến môi trường được mô tả trong câu trả lời của Boris )

See commit 3c8ede3 (26 Jun 2016) by Nguyễn Thái Ngọc Duy ( pclouds) .
(Hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết dc21164 , ngày 19 tháng 7 năm 2016)

Một biến cấu hình mới core.sshCommandđã được thêm vào để chỉ định giá trị nào cho GIT_SSH_COMMAND để sử dụng cho mỗi kho lưu trữ.

Tương tự như $GIT_ASKPASShoặc $GIT_PROXY_COMMAND, chúng tôi cũng đọc từ tệp cấu hình trước sau đó quay trở lại $GIT_SSH_COMMAND.

Điều này hữu ích để chọn các khóa riêng tư khác nhau nhắm mục tiêu đến cùng một máy chủ (ví dụ: github)

core.sshCommand:

Nếu biến này được đặt git fetchgit pushsẽ sử dụng lệnh được chỉ định thay vì sshkhi chúng cần kết nối với hệ thống từ xa.
Lệnh có cùng dạng với GIT_SSH_COMMANDbiến môi trường và được ghi đè khi biến môi trường được đặt.

Nó có nghĩa là git clonecó thể:

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git

Nếu bạn muốn áp dụng điều đó cho tất cả các repo, như user1300959 thêm vào trong các nhận xét , bạn sẽ sử dụng cấu hình chung.

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

2
Nhiều khả năng bạn chưa có repo vì bạn có git clone- trong trường hợp này, bạn có thể muốn định cấu hình lệnh git ssh trên toàn cầu:git config --global core.sshCommand ...
iurii 22/02/17

@ user1300959 Điểm tốt, cảm ơn bạn. Tôi đã bao gồm bình luận của bạn trong câu trả lời để hiển thị nhiều hơn.
VonC

Đây là câu trả lời tốt nhất.
MikeSchinkel

Trong phần cuối cùng bạn đang thiếu dấu nháy đơn
Luigi Lopez

@LuigiLopez Bạn có thể chỉnh sửa câu trả lời không? Tôi sẽ xem xét chỉnh sửa của bạn.
VonC

21

Đây là ví dụ khó về cách chuyển các đối số ssh bằng cách sử dụng biến GIT_SSH:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@host

Lưu ý: Các dòng trên là các dòng lệnh đầu cuối mà bạn nên dán vào thiết bị đầu cuối của mình. Nó sẽ tạo một tệp ssh , làm cho nó có thể thực thi và thực thi nó.

Nếu bạn muốn chuyển tùy chọn khóa cá nhân, vui lòng kiểm tra Cách thông báo cho git biết khóa cá nhân nào để sử dụng? .


Đẹp! Câu hỏi: Cả hai $*"$@"dường như hoạt động. Thông thường tôi sử dụng "$@", vì cái kia có vẻ không được dùng nữa. Có lý do gì để thích hơn $*trong trường hợp này không?
mh8020

16

Cấu hình mức kho lưu trữ mà không ảnh hưởng đến cài đặt mức hệ thống

Hợp nhất các câu trả lời đã có sẵn, tôi đang chọn các bước dưới đây. Điều này đảm bảo rằng các thay đổi cấu hình không ảnh hưởng ở cấp độ máy mà chỉ ảnh hưởng đến hệ thống lưu trữ đang hoạt động. Điều này là cần thiết trong trường hợp của tôi vì tập lệnh của tôi cần được thực thi trên tác nhân Bamboo được chia sẻ.

1.Clone kho lưu trữ theo GIT_SSH_COMMANDcách tiếp cận.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2. Sau khi nhân bản, điều hướng vào thư mục kho lưu trữ.

cd repo-dir

3. Đặt core.sshCommandcấu hình để tất cả các cuộc gọi trong tương lai chỉ có thể chạy bằng lệnh git như bình thường, nhưng sử dụng nội bộ các tùy chọn git được cung cấp.

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

1
Sử dụng tốt core.sshCommand, mà tôi đã đề cập ở trên. Đã ủng hộ.
VonC

5

Tôi nghĩ rằng cập nhật git lên phiên bản> = 2.3 và sử dụng GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@hostlà tùy chọn đặt cược, nhưng nếu không thể, @ josh-lee đã đưa ra một tùy chọn tốt, nhưng vui lòng cập nhật câu trả lời của bạn bằng cách thụt vào tệp cấu hình ssh.

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

0

Sự cố này đã được khắc phục bằng cách thực hiện các bước sau trong máy Window: -

  • Tạo tệp cấu hình trong thư mục C: \ Users \ username.ssh.

  • thêm dòng sau vào tệp cấu hình.

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • sau đó thử lại.

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.