2010-09-11 23 views
7

Bất cứ ai cũng có thể đề xuất một cách rất đơn giản để sử dụng Net :: SSH :: Perl trong Windows mà không có tất cả những hacks Cygwin và tất cả.Làm cách nào để định cấu hình SSH bằng Perl trong Windows?

Bất cứ khi nào tôi đang cố gắng để cài đặt các module nó đưa tôi tới một số module phụ thuộc khác và quá trình này dường như không bao giờ kết thúc ..

Cảm ơn trước

+0

Strawberry Perl hoặc ActiveState? (hoặc * khác *?) – mob

+0

... hoặc có lẽ là Cygwin Perl? – bart

+0

Tôi đã hỏi xung quanh và đã được thông báo rằng bạn có thể muốn xem [Net :: SSH2] (http://cpan.uwinnipeg.ca/dist/Net-SSH2). Các gói PPM có sẵn từ trang đó. – bart

Trả lời

7

Đây là một bài về cách để làm điều đó tôi tìm thấy.

Gần đây tôi đã có một dự án yêu cầu tập lệnh để thực hiện phiên SSH cho thiết bị Cisco và thực hiện một số thay đổi cấu hình. Ngôn ngữ kịch bản yêu thích của tôi là, tất nhiên, perl.

Trước đây tôi đã viết các tập lệnh bằng cách sử dụng mô-đun Net :: Telnet, có thể phát hiện các lời nhắc thiết bị khác nhau và gửi lệnh tới thiết bị để thay đổi cấu hình của thiết bị. Vì vậy, tôi nghĩ rằng đây sẽ là một trường hợp khá đơn giản khi tìm một mô-đun thích hợp, tương tự sử dụng SSH thay vì Telnet. Một điều khác mà tôi cần phải đề cập đến là tôi thường bị ràng buộc để sử dụng nền tảng Win32 (tức là Windows 200, 2003, XP) do thực tế là hầu hết các trang web khách hàng mà tôi làm việc vào những ngày này không sử dụng Unix (hoặc Linux) .. đó là một điều đáng tiếc thực sự trong quan điểm của tôi, nhưng tôi không thiết lập các chính sách công ty của khách hàng của tôi.

Một cái nhìn ban đầu của các module perl sẵn tiết lộ một số module mà dường như chỉ là những gì tôi cần:

Net :: Appliance :: phiên Net :: SSH :: W32Perl Net :: SSH

Vì vậy, tôi đã nói với sếp của mình, 'Yep, không có vấn đề' và thiết lập tập hợp một kịch bản lệnh SSH vào một thiết bị từ xa và gửi một số lệnh để thay đổi cấu hình của nó.

Sau một ngày thử các mô-đun khác nhau, tôi nghĩ: 'Hmmm, có lẽ điều này sẽ không dễ dàng như tôi nghĩ đâu!'

Mỗi mô-đun tôi đã xem xét dường như gặp sự cố khi sử dụng nó trong môi trường Windows. Nói tóm lại, đây là những vấn đề tôi thấy với mỗi module:

* Net::Appliance::Session : has a dependency on IO::Pty, which won't ever run on Windows 
* Net::SSH::W32Perl : ``getpwuid function is unimplemented'' message`` when building from scratch. Older ppd's found at http://www.soulcage.net/ppds.58 just don't seem to work....even when installed in to the Activestate perl distribution 
* Net::SSH : Unix only 

Vì vậy, vào thời điểm này, tôi đã bắt đầu nghĩ rằng có lẽ đây chỉ là không đi làm việc ở tất cả trên Windows ....

Sau đó, tôi nhớ nhìn thấy một bài đăng trên perl mongers nơi ai đó đã đề cập rằng họ đã sử dụng perl trong Cygwin để chạy một trong những Net :: * mô-đun. Vì vậy, mặc dù ý nghĩ phải tải xuống và cài đặt Cygwin ban đầu dường như không quá hấp dẫn, tôi nghĩ tôi sẽ cho nó đi vì tôi không còn nơi nào khác để đi.

Cygwin

Cygwin là ... tốt, tôi xin trích dẫn trực tiếp từ trang web Cygwin:

'' Cygwin là một môi trường Linux như cho Windows. Nó bao gồm hai phần:

Một DLL (cygwin1.dll) hoạt động như lớp mô phỏng API Linux cung cấp chức năng API API đáng kể. Một bộ sưu tập các công cụ cung cấp giao diện và cảm nhận của Linux.

Các Cygwin DLL hiện làm việc với tất cả, phát hành thương mại x86 32 bit gần đây và phiên bản 64 bit của Windows, với ngoại lệ của Windows CE.``

Vì vậy, nó cho phép bạn chạy trong một Linux-type môi trường ... nghe có vẻ hứa hẹn hơn cho các mô-đun Net :: * khác nhau mà tôi đã xem xét.

Ngoài ra, khi lõi Cygwin cơ bản được cài đặt, nó cho phép bạn tải xuống và cài đặt toàn bộ một loạt các tính năng khác, bao gồm cả perl!

Vì vậy, tôi đặt về cài đặt Cygwin bằng cách tải xuống tệp 'setup.exe' từ trang chủ Cygwin và chạy nó trên máy tính của tôi.

Cygwin cung cấp giao diện trực quan không trực quan để cho phép bạn chọn một máy nhân bản để tải xuống các tệp và các gói bạn muốn tải xuống.

Dưới đây là các gói mà tôi cài đặt ngoài chỉ là gói Cygwin lõi cơ bản được cài đặt cho bạn:

gcc-core gnupg làm ncftpget OpenSSH perl perl-ExtUtils wget zip

Bạn có thể cài đặt những người khác (ngoài ra) nếu bạn thích, nhưng những việc này đã giúp tôi.

Perl

Một khi tôi đã Cygwin cài đặt (bao gồm cả phân phối perl mà tôi bao gồm), tôi là tất cả các thiết lập để thêm vào các module mà tôi muốn cố gắng sử dụng (ví dụ Net :: SSH :: Appliance) .

Nếu bạn đã quen thuộc với perl trên hệ thống Unix, thì có thể bạn sẽ rất quen thuộc với vỏ CPAN để thêm mô-đun vào phân phối perl của bạn. Theo Cygwin, quá trình này là chính xác như nhau.

Nếu bạn quen với việc sử dụng phiên bản Kích hoạt của perl, có thể bạn đã quen sử dụng trình quản lý PPM Activestate để thêm mô-đun mới vào perl. Vâng, tin xấu là dưới Cygwin, bạn không có một người quản lý PPM, và bạn phải sử dụng vỏ CPAN, mà là một chút phức tạp hơn để sử dụng nếu bạn không quen với nó. Các tin tốt tuy nhiên, là bạn sẽ có quyền truy cập vào các mô-đun perl xa hơn!

Khi bạn cài đặt Cygwin, nó sẽ đặt một biểu tượng ở đâu đó (hoặc trên máy tính để bàn của bạn, thanh quicklauch hoặc menu khởi động) để bạn có thể khởi chạy shell Cygwin (nó trông giống như sau:

Nếu bạn bấm biểu tượng vỏ, bạn sẽ nhận được một vỏ Cygwin tốt đẹp mở ra nơi bạn có thể gõ vào các lệnh khác nhau.Bạn có thể nghĩ nó như là một vỏ Unix cho tất cả các mục đích và mục đích. , bạn cần phải nhập 'cpan' tại dấu nhắc lệnh.Điều này sẽ cho phép bạn tải mô-đun mới vào phân phối perl của bạn.

Bây giờ, lần đầu tiên bạn đi vào vỏ CPAN, nó sẽ giúp bạn rất nhiều câu hỏi khá khó xử về nơi mà các tiện ích khác nhau được và gương mà bạn muốn sử dụng. Trong chính, nếu bạn đã cài đặt các mô-đun mà tôi đề nghị cho Cygwin, bạn có thể chấp nhận các giá trị mặc định. (Tấm gương bạn sẽ phải tự mình tìm ra - nó phụ thuộc vào nơi bạn đang ở thế giới).

Cài đặt duy nhất tôi khuyên bạn thay đổi từ mặc định là câu hỏi về việc bạn nên được 'hỏi hoặc theo dõi' cho các mô-đun cần thiết trước - tôi sẽ thực hiện 'theo dõi' để tiết kiệm rất nhiều rắc rối.

Một khi bạn có vỏ CPAN bạn mở (bạn có thể nói, bởi vì bây giờ bạn có một 'CPAN>' dấu nhắc), bạn cần phải nhập các lệnh sau để tải ở một số module perl mà bạn sẽ cần:

cài đặt LWP (chấp nhận tất cả mặc định cho bất kỳ câu hỏi nào được yêu cầu) cài đặt Net :: Appliance :: Session

Khi bạn nhập các lệnh này, bạn sẽ thấy rất nhiều thứ bay lên màn hình khi mô-đun được cài đặt cho bạn.

Chạy Scripts

Vâng, vào thời điểm này, chúng tôi đã thực hiện một tour du lịch chứ không phải cơn lốc qua nhận Cygwin và Perl instaled trên nền tảng của bạn, nhưng bây giờ bạn phải ở trong một vị trí để chạy một số kịch bản perl.

Chúng tôi đã cài đặt mô-đun Net :: Appliance :: Session vào phân phối perl của bạn để chúng tôi có thể chạy các tập lệnh perl sử dụng nó để cung cấp cho chúng tôi phiên Telnet hoặc SSH tới thiết bị đích.

Vì chúng ta đang chạy trong môi trường Cygwin, chúng ta có thể sử dụng mô-đun này trên nền tảng Windows - một thứ mà chúng ta không thể thực hiện bằng cách cài đặt Activestate perl, hoặc thậm chí bằng cách biên dịch phiên bản perl của chúng ta trong Windows. Vì vậy, bây giờ, chúng ta có thể chạy các script perl sẽ cho phép chúng ta thực hiện các phiên SSH cho các thiết bị mạng chỉ hỗ trợ SSH.

Bạn có thể tự hỏi: `` điều đó có nghĩa là tôi phải chạy các script perl của tôi từ vỏ Cygwin mỗi khi tôi cần chạy chúng? ''. Vâng, tin tốt là không, bạn không ..! Miễn là bạn gọi cygwin perl thực thi để chạy kịch bản của bạn, nó sẽ chạy tốt từ một dấu nhắc DOS (hoặc lập lịch hệ thống!). Vì vậy, điều này sẽ làm việc tốt:

c: \ c: \ Cygwin \ bin \ perl.exe myscript.pl

Nhưng dù sao, tôi đoán đó là đủ để cho bạn biết làm thế nào tôi bị nứt vấn đề cụ thể của tôi. Tôi hy vọng sẽ trình bày chi tiết hơn về các aritcles trong tương lai, cũng như cung cấp thêm thông tin về cách sử dụng mô-đun Net :: Appliance :: Session cực kỳ hữu ích để tạo ra một số kịch bản hữu ích để kiểm soát và cấu hình các thiết bị mạng của bạn.

http://perlwin32ssh.blogspot.com/2007/07/test_4418.html

+0

+2 nhưng không thể vì tôi chỉ có thể bỏ phiếu một lần. –

2

Đối với ActiveState Perl, có lẽ bạn có thể thử cho module Net :: SSH2. Tôi đã thử với một vài ví dụ trực tuyến và nó đã làm việc cho tôi.

Bạn có thể xem các tài nguyên sau để cài đặt và chạy ví dụ mẫu bằng Net :: SSH2.

Sử dụng kho này để cài đặt Net :: SSH2 http://theoryx5.uwinnipeg.ca/ppms/

vài ví dụ: http://www.perlmonks.org/?node_id=569657

Hy vọng điều này sẽ làm việc cho bạn. Tôi đã thử nó và nó đã làm việc cho tôi.

2

Câu trả lời về việc sử dụng Perl từ bên trong Cygwin sau đó gọi nó từ dòng lệnh Windows là câu trả lời đúng. CẢM ƠN RẤT NHIỀU HIỆU QUẢ CỦA BẠN!

Tuy nhiên, phương pháp này để gọi một trường hợp PERL chạy trong Cygwin từ Windows Command Line là không luôn tối ưu:

c: \ Cygwin \ bin \ perl.exe myscript.pl

Kỹ thuật đó sẽ hoạt động với một số tập lệnh Perl nhưng không phải tất cả. Nó đã cho tôi heck cố gắng sử dụng NET: SSH: EXPECT và phương thức login(). Nó sẽ hủy bỏ với các lỗi lạ.

Cách tốt hơn để gọi dụ Perl của bạn chạy trong Cygwin từ dấu nhắc lệnh của Windows là thế này:

c: \ Cygwin \ bin \ bash --login -c 'perl myscript.pl'

Điều này dường như thực thi kịch bản Perl hoàn toàn trong môi trường Cygwin và thậm chí các tập lệnh Perl phức tạp hoặc các tập lệnh có nhiều phụ thuộc hoặc không có khả năng xử lý tên đường dẫn kiểu MSDOS, sẽ vẫn chạy. Bạn vẫn có thể trả lại đầu ra của tập lệnh Perl trở lại cửa sổ lệnh Windows, ví dụ bằng cách sử dụng in() từ bên trong tập lệnh Perl của bạn.

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