2009-09-22 46 views
6

Trước hết, tôi biết rõ rằng có rất nhiều câu hỏi liên quan đến chủ đề này. Tôi đã đọc chúng, nhưng vẫn có thể tìm ra câu trả lời thích hợp cho tình huống của tôi.Cách trả lời lời nhắc mật khẩu khi sử dụng SCP trong tập lệnh shell?

Tôi muốn scp toàn bộ ~/cs###/assign1 dir từ thư mục địa phương tới trường học bằng tập lệnh trình bao. Câu hỏi của tôi là, có một cách trong kịch bản của tôi để chờ cho lời nhắc mật khẩu, và sau đó mô phỏng sự kiện hội đồng quản trị quan trọng để 'loại' trong mật khẩu của tôi?


here là một hướng dẫn thực sự chi tiết về làm thế nào để thiết lập phím

+0

Câu hỏi này nghe có vẻ chính xác như trường hợp của bạn: http://stackoverflow.com/questions/50096/how-to-pass-password-to-scp – innaM

+0

Lưu ý rằng câu trả lời cho câu hỏi trùng lặp giả định không đề cập đến 'ssh keys 'như được đề cập bởi BZ. –

+0

Tôi đã hy vọng rằng có thể có một giải pháp chỉ sử dụng các lệnh shell đơn giản hoặc unix. – derrdji

Trả lời

10

Are phím ssh không được phép? Đó sẽ là một giải pháp tốt hơn.

+2

Vâng, đó là chìa khóa. :-) –

2

Tôi không nghĩ bạn có thể dễ dàng làm điều đó. Những gì bạn có thể làm là sử dụng xác thực khóa công khai thay thế.

Something dọc theo những dòng

ssh-keygen -t rsa 
ssh school mkdir .ssh/ 
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys" 

(hoặc dsa).

Nhưng này, nó không phải là serverfault, phải không? ;-)

+0

Máy chủ và mọi thứ đã được thiết lập bởi trường học, tôi không có quyền kiểm soát cài đặt ở cuối đó – derrdji

+2

Các cài đặt này có trong thư mục chính của bạn. –

3

Cân nhắc sử dụng khóa hoặc thư viện bên ngoài.

Tôi không nghĩ rằng nó có thể khác (tôi hy vọng tôi không sai), vì nó áp đặt tự động bạo lực xâm nhập và đánh hơi mật khẩu.

Có thư viện có thể làm những gì bạn muốn (sử dụng giao thức SFTP, không gọi scp), chẳng hạn như libssh.

Một lần nữa, tôi đặc biệt khuyên dùng các phím.

+0

Thôi nào, tự động hóa các cuộc tấn công bạo lực có thể được thực hiện bằng cách sử dụng thư viện ;-) –

0

Nếu bạn có thể gắn thư mục từ máy Windows (ví dụ: thông qua AFS, NFS hoặc SMB mà tất cả các phòng thí nghiệm Windows của trường đại học của tôi), bạn có thể sử dụng pscp bằng công tắc -pw.

-1

Tại sao không chỉ sử dụng tùy chọn "-r" để sao chép nó theo cách đệ quy? Hoặc sử dụng rsync thay thế?

Bạn cũng có thể sử dụng xác thực khóa công khai, không yêu cầu trợ giúp về kết thúc miễn là bạn có tài khoản người dùng thực. Xem this

0

Bạn không nói bạn đang sử dụng nền tảng nào ở nhà và ở trường.Giả sử Linux, Cygwin hay OS/X bạn có một vài lựa chọn:

  1. xác thực khóa công khai nếu nó chưa được tắt tại máy chủ
  2. ssh-agent và ssh-add nhập mật khẩu của bạn một lần mỗi phiên

Đối với tùy chọn (1), bạn sẽ

  1. tạo ra một cặp khóa ở nhà sử dụng ssh-keygen, không có cụm từ mật khẩu trên khóa riêng. Lưu ý rằng bỏ qua một cụm từ mật khẩu có lẽ không phải là ý tưởng hay nếu người khác sử dụng cùng một máy tính, nhưng mục tiêu của bạn là tìm cách nhập mật khẩu.
  2. tải khóa CÔNG vào tài khoản của trường của bạn và đặt nó vào ~/.ssh/authorized_keys
  3. Sử dụng scp với "-i identityfile" tùy chọn, nơi identityfile là đường dẫn đầy đủ để khóa riêng của bạn . Hoặc, thêm mục nhập vào .ssh/config (xem trang hướng dẫn)

Đối với tùy chọn thứ hai, ssh-agent cho phép bạn lưu mật khẩu của bạn trong một quá trình địa phương một lần mỗi phiên. Bạn đặt thời gian hết hạn

1

Tôi đồng ý rằng bạn nên sử dụng khóa. Nhưng expect có thể tự động hóa khía cạnh tương tác của quá trình NẾU bạn muốn mã hóa mật khẩu của mình trong một tệp tập lệnh văn bản thuần túy.

10

Sử dụng "sshpass"!

#!/bin/bash 
sshpass -p "password" scp -r /some/local/path [email protected]:/some/remote/path 
+0

'sshpass' trông thú vị. Làm việc trên một hệ thống sẽ không hoạt động tốt với các khóa SSH để điều này sẽ thực hiện. Cảm ơn! – JakeGould

0

Như nhiều người đã nói rằng sử dụng khóa ssh sẽ là cách an toàn nhất và tốt nhất. Nếu bất kỳ ai khác vẫn đang tự hỏi xung quanh và tìm kiếm trợ giúp, trong Ubuntu giúp có một nhanh chóng và thẳng về phía trước way để sử dụng các khóa ssh.

0

Khi bạn thiết lập ssh-keygen như được giải thích here, bạn có thể làm

scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

nơi id_rsa là chìa khóa địa phương tạo ra trong thiết lập ssh-keygen.

Nếu bạn muốn giảm bớt nhập mỗi thời gian, bạn có thể sửa đổi tập tin .bash_profile của bạn và đặt

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/ 

Sau đó từ thiết bị đầu cuối của bạn làm source ~/.bash_profile. Sau đó, nếu bạn nhập remote_scp trong thiết bị đầu cuối của mình, nó sẽ chạy lệnh scp mà không cần mật khẩu.

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