2012-11-28 33 views
21

Tôi đã có một quy trình tự động hóa đơn giản để viết cần sao chép một vài tệp từ máy chủ Linux sang cửa sổ qua SSH. Điều này có thể được thực hiện bằng cách sử dụng putty.Putty sẽ không lưu các phím để truy cập vào máy chủ khi chạy tập lệnh trong hudson

SSH, là một phần của giao thức, xác minh danh tính của máy chủ và nếu không biết là chính xác, sẽ nhắc bạn chấp nhận danh tính của máy chủ. Khi tôi kết nối thủ công máy chủ Linux với putty, nó sẽ không nhắc bất kỳ thông tin nào để chấp nhận danh tính của máy chủ. Nhưng một khi tôi đặt quá trình tự động hóa này vào Hudson như công việc lịch trình. Thông điệp chính xác là:

Khóa máy chủ của máy chủ không được lưu trong bộ nhớ. Bạn không có đảm bảo rằng máy chủ là máy tính bạn nghĩ. Máy quét khóa rsa2 của máy chủ là: ssh-rsa 1024 cc: 78: 13: a3: 68: a6: 59: 7e: b8: 23: 2d: 13: 3e: 66: 9b: b9 Nếu bạn tin tưởng máy chủ này , nhập "y" để thêm khóa vào bộ nhớ cache của PuTTY và thực hiện kết nối . Nếu bạn muốn tiếp tục kết nối chỉ một lần mà không cần thêm khóa vào bộ nhớ cache, hãy nhập "n". Nếu bạn không tin cậy máy chủ lưu trữ này, hãy nhấn Quay lại để hủy kết nối. Lưu trữ khóa trong bộ nhớ cache? (y/n) Đã hủy kết nối.

Thông thường bạn sẽ nhấn "Y" ở đây, giả sử khóa máy chủ là chính xác, để lưu trữ trong kết nối trong tương lai. Việc lưu trữ này đi vào Registry dưới HKEY_CURRENT_USER \ Software \ SimonTatham \ Putty \ SshHostKeys

Nhưng thật không may, quy trình tự động chạy ở Hudson không thể tương tác bằng cách nhấn “Y” để lưu trữ khóa máy chủ trong bộ đệm ẩn. Và tôi cũng không thể tái tạo vấn đề bằng cách đơn giản chạy tiến trình tự động hóa theo lệnh dos.

Có ai biết cách giải quyết sự cố không?

Trả lời

25
echo y | pscp -i /path/to/key/file [email protected]:/tmp/file . 
echo y | plink -i /path/to/key/file scripts.sh 

nó sẽ lưu trữ đăng cai fingureprint chìa khóa để sau vị trí ở lần đầu tiên, và sẽ bỏ qua "y" lần sau

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys 
+3

giải pháp rất thông minh để mô phỏng tương tác với tiền tố "echo y |" –

+0

Tôi đã thử điều này và gặp rắc rối cho đến khi tôi nhận ra rằng tôi vẫn còn bao gồm tham số --batch. Tôi đã xóa nó và nó hoạt động chính xác. – MattEvansDev

+0

Nếu mật khẩu không chính xác, thì "y" sẽ được lặp lại khi putty thử lại mật khẩu, khiến cho tập lệnh thất bại. –

3
echo y | plink -ssh <[email protected]> -pw <password> exit 
plink -ssh <[email protected]> -pw <password> [yourcommand] 

Giải thích: Sử dụng echo để ống, đầu vào của người dùng y 'đến lệnh đã chọn và sau đó thoát. Câu lệnh tiếp theo sẽ gọi plink thực thi lần thứ hai để chạy lệnh của bạn.

10

Đối với máy chủ nội bộ, thủ thuật mù echo y | ... có thể là đủ (và siêu đơn giản).

Tuy nhiên, đối với các máy chủ bên ngoài được truy cập qua internet, sẽ an toàn hơn khi chấp nhận khóa máy chủ lưu trữ một lần thay vì chấp nhận mọi lúc một cách mù quáng.


Tạo tệp .reg mà bạn có thể chạy trên (các) máy khách.

  • Connect tương tác từ máy tính bất kỳ plink ...
  • Xác minh và chấp nhận các máy chủ quan trọng
  • mở regedit
  • Navigate to HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  • Kích chuột phải vào mục (sẽ có một tên như [email protected]<port>:<address>)
  • Xuất sang tệp .reg

cache host key trên máy client (s)

  • Chạy file .reg trên bất kỳ máy client sẽ kết nối đến máy chủ đó
  • Hãy chắc chắn để đăng nhập bằng tài khoản người dùng sẽ chạy plink (tức là trong trường hợp đó là tài khoản dịch vụ)
+0

'echo y' sẽ không hoạt động đối với tôi khi sử dụng với git. Chỉ trong trường hợp bất cứ ai khác tình cờ gặp – user1167442

4

Tôi gặp sự cố này khi sử dụng Bazaar và đặt thủ công trình khách ssh của mình thành putty thay vì sau đó được xây dựng trong paramiko và tôi gặp vấn đề tương tự. đã cố gắng nói rằng chìa khóa không nằm trong 'host đã biết' và hỏi xem tôi có nên kiểm tra nó không, nhưng do nó được chạy bởi một chương trình khác và không phải trong một terminal bình thường, nó vừa thoát ngay lập tức.

Nếu bạn có thể, chỉ cần chạy putty và kết nối với máy chủ theo cách thủ công để làm cho nó lưu khóa công khai ssh trong sổ đăng ký để khi chương trình tự động tìm cách kết nối nó sẽ không được hiển thị với tùy chọn y/n.

Hoặc bạn có thể sử dụng một kịch bản python3 nhỏ mà tôi đã viết để chuyển đổi giữa hai 'nổi tiếng sở tại định dạng putty và sử dụng openssh: https://github.com/mgrandi/openssh-putty-knownhost-converter

'

9

Tôi cũng có vấn đề này khi sử dụng một lô lên lịch sử dụng tài khoản Hệ thống cục bộ. Với tài khoản này, bạn không thể đăng nhập để chấp nhận khóa máy chủ hoặc đặt giá trị HKEY_CURRENT_USER theo cách thủ công. Tôi thấy rằng việc tạo khóa sau:

HKEY_USERS\.DEFAULT\Software\SimonTatham\PuTTY\SshHostkeys 

và thêm giá trị chuỗi máy chủ tại đây làm việc cho tài khoản Hệ thống cục bộ.

+1

Chính xác những gì tôi cần để thực hiện công việc này với Quartz.net! – K0D4

4

Tính đến ngày 09 Tháng Chín năm 2014 với các phiên bản tương ứng của Plink (thử nghiệm với Plink 0,66), bạn có thể sử dụng tùy chọn -hostkey, như ghi nhận ở đây:

http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/accept-host-keys.html

Sử dụng chìa khóa trong câu hỏi ban đầu :

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 [email protected] 

Tôi đã sử dụng thành công "-hostkey" trong tập lệnh của mình để khắc phục sự cố nhắc khóa máy chủ ban đầu.

"-hostkey" cũng được ghi lại để hoạt động với pscp (phiên bản 0.66).

Lưu ý rằng bạn phải thay đổi hostkey nếu bạn thay đổi máy chủ hoặc máy chủ sshd tính toán lại khóa.

1

Giải pháp thông qua Code: Soạn putty/Plink để tự động chấp nhận và các phím ssh cửa hàng

Bạn sẽ được nhắc để lưu trữ host key SSH trong bộ nhớ cache, Kể từ khi tài khoản người dùng thực hiện dont Plink có dẫn chương trình trong registry , nó treo, bởi vì nó chờ trả lời (có/không ..).
Nếu bạn muốn giải quyết điều này thông qua mã, nhận mã nguồn putty, thực hiện một số thay đổi, biên dịch và sử dụng nhị phân plink mới - mã lưu trữ khóa máy chủ ssh mà không có lời nhắc.
Cách thực hiện? Đối với cửa sổ, tôi làm như sau:

  • Tải về mã nguồn putty mới nhất từ: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
    (Hãy tìm “mã nguồn” và tải về "kho lưu trữ của Windows Source")
    Attention: Để mở putty mã nguồn với Visual Studio, bạn phải tải xuống phiên bản phát hành , Nếu bạn kiểm tra một cam kết cụ thể (hoặc đầu), tệp giải pháp Visual Studio sẽ không tồn tại vì chúng được tạo trong khi xây dựng.
    Trích từ: Cannot compile PuTTY, Plink or Pscp on Windows due to missing Windows/MSVC subdirectory

  • Source code cần được cập nhật, Những gì chúng ta muốn thay đổi nằm ở chức năng verify_ssh_host_key (..) trong "wincons.c", Chúng tôi muốn nhận xét ra phần mã nhanh chóng mà cho yes/no và chỉ lưu trữ chìa khóa, Bắt đầu với lời nhận xét ra mã nhắc:

    /*hin = GetStdHandle(STD_INPUT_HANDLE); 
    GetConsoleMode(hin, &savemode); 
    SetConsoleMode(hin, (savemode | ENABLE_ECHO_INPUT | 
         ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT)); 
    ReadFile(hin, line, sizeof(line) - 1, &i, NULL); 
    SetConsoleMode(hin, savemode); 
    
    if (line[0] != '\0' && line[0] != '\r' && line[0] != '\n') { 
    if (line[0] == 'y' || line[0] == 'Y') 
    store_host_key(host, port, keytype, keystr); 
    return 1; 
    } else { 
        fprintf(stderr, abandoned); 
        return 0; 
    }*/ 
    

tiếp tục với việc thêm những dòng sau để thay thế (mã mà trách nhiệm lưu trữ host key):

store_host_key(host, port, keytype, keystr); 
return 1; 

Biên dịch giải pháp và lấy lệnh plink/pscp .. bạn tốt để không cần nhắc, nó chấp nhận khóa máy chủ ssh và lưu trữ sau đó trong sổ đăng ký.

Các vấn đề liên quan