Làm thế nào để cho phép scp an toàn, nhưng không ssh


7

Tôi làm việc từ Mac Book Pro (được gọi là foo). Tôi có một máy chủ nơi khách hàng của tôi scp các tệp lớn. (gọi là thanh). Tôi thường xuyên ssh vào thanh và quét một tệp (được gọi là buzz) cho máy Mac của tôi.

bob@foo$ ssh bar  
Last login: Fri Aug 23 14:49:32 2013 from foo  
bob@bar$ scp /guest/buzz bob@foo:~
Password: 

Tôi không muốn nhập mật khẩu của mình mỗi lần tôi quay lại một tệp vào máy Mac vì cuối cùng tôi sẽ tự động hóa mật khẩu này.
Tôi biết tôi có thể thiết lập các khóa ssh, nhưng tôi lo ngại rằng nếu ai đó hack barmà họ có thể dễ dàng truy cập foo. (Sửa tôi nếu tôi sai)

Có cách nào để sao chép tệp từ thanh sang foo, không có mật khẩu, sẽ không cho ai đó truy cập toàn bộ vào máy Mac của tôi nếu máy chủ bị xâm nhập không?

Lưu ý: Tôi đang nghĩ việc thiết lập một người dùng mới trên máy Mac của mình và vô hiệu hóa quyền truy cập shell cho người dùng đó có thể hoạt động, nhưng tôi cảm thấy có một cách tốt hơn. Tôi không muốn thêm người dùng nếu có thể.


1
Bạn đã sai :) Sử dụng khóa là cách tiếp cận an toàn nhất: ngay cả khi kẻ tấn công đã xâm phạm vào thanh, chúng sẽ chỉ có khóa chung của foo.
jasonwryan

1
không, thanh đang quét đến foo, vì vậy foo là khóa có khóa công khai. nếu tôi hiểu chính xác các khóa SSH.
strugee

1
Chỉ vì OP ssh vào thanh để quay lại foo ... Sử dụng các phím, họ sẽ chỉ (từ foo)scp bar:file .
jasonwryan

Bạn có kiểm tra rsync cho nhiệm vụ của mình không?
thế giới vô tội

Tôi nghĩ ngay cả khi bạn chỉ cho phép SCP nhưng không có SSH. Nếu thanh bị xâm phạm bởi một anh chàng đủ thông minh, anh ta vẫn có thể có quyền truy cập vào foo ngay cả khi không có SSH. Có nhiều cách để làm điều này, ví dụ như SCP ghi đè lên ~ / .bash_profile của bạn trên thanh và đợi cho đến lần đăng nhập tiếp theo của bạn để tạo bashrc bắt đầu một quy trình mở cửa sau, nhưng tôi chắc chắn một hacker chuyên nghiệp sẽ còn tốt hơn ý tưởng hơn của tôi.
phát lại

Câu trả lời:


6

Ok, bạn đã làm mọi thứ rối tung lên.

Từ những gì tôi đã hiểu, bạn chỉ muốn sao chép một tập tin từ thanh sang foo :

[file]  *bar* ------copy------> *foo*

Để làm điều đó, trước tiên bạn sshphải thanh sau đó scpgửi đến foo :

        *bar* -------ssh------> *foo* [file]

sau đó:

        *foo* ----scp[file]---> *bar*

Nếu bạn đang làm như thế này, bạn đang làm nó không an toàn và sai . Tất cả bạn phải làm là trực tiếp gửi lại tệp cho bạn:

bob@foo$ scp bob@bar:/guest/buzz ~

nói cách khác:

        *foo* <---scp[file]---- *bar*

Bây giờ có một vài vấn đề cần giải quyết

Làm thế nào để biết tập tin ở đâu?

a) Sử dụng SSH trong thiết bị đầu cuối khác

Chỉ cần mở một thiết bị đầu cuối thứ hai, SSH vào thanh , tìm tệp của bạn và sao chép / dán đường dẫn đến thiết bị đầu tiên.

b) Sử dụng SFTP

SFTP (không liên quan đến FTP cũng như FTPS dưới bất kỳ hình thức nào!) Được triển khai trong OpenSSH và có sẵn theo mặc định. Chỉ cần SFTP đến máy chủ và sử dụng các lệnh giống như FTP để tìm tệp của bạn và getchúng.

c) Sử dụng GUI

Ví dụ, Filezilla hoặc Nautilus có thể duyệt các chia sẻ SFTP / SSH từ xa.

d) Thiết lập chứng chỉ

Khi bạn thiết lập kết nối chứng chỉ, bạn có thể thực hiện hoàn thành tab ở phía cục bộ cũng như ở phía xa! Ví dụ, với buzzví dụ của bạn , bạn có thể làm:

bob@foo$ scp bob@bar:/guest/[tab][tab]

và đợi một chút cho danh sách các tập tin có trong thư mục / remote /.

Làm cách nào để thiết lập SSH với chứng chỉ?

a) Nếu chưa được thực hiện, hãy tạo cặp khóa RSA cá nhân của bạn

Nếu bạn đã cài đặt ứng dụng khách OpenSSH, bạn có thể thực hiện bằng cách nhập

bob@foo$ ssh-keygen -t rsa

(xem hướng dẫn hoặc trực tuyến cho tất cả các tùy chọn có sẵn). Nó có thể yêu cầu bạn nhập mật khẩu. Đây không phải là mật khẩu tài khoản cục bộ của bạn mà là mật khẩu tùy chọn có thể được sử dụng để mã hóa khóa riêng mà bạn sắp tạo.

Trên thực tế, bạn sẽ tạo 2 tệp:

  • /Users/[yourusername[/.ssh/id_rsa
  • /Users/[yourusername[/.ssh/id_rsa.pub

Cái đầu tiên, * id_rsa * phải là riêng tư . Theo mặc định, ssh-keygensẽ làm mọi thứ có thể để tránh công khai (sử dụng quyền truy cập hệ thống tệp). Đó là lý do tại sao nó cũng sẽ yêu cầu bạn nhập mật khẩu (tùy chọn). Đừng quá hoang tưởng với điều đó, nhưng chỉ cần nhớ * id_rsa * == khóa cá nhân == riêng tư . Chìa khóa này không bao giờ nên rời khỏi máy tính của bạn.

Cái thứ hai là công khai. Nó đòi hỏi một lượng lớn năng lượng máy tính để lấy lại khóa riêng của bạn từ chứng chỉ công khai này (tôi thực sự muốn nói là HUUUUUUGE). Điều này là hoàn toàn an toàn để chia sẻ nó với cả thế giới. Ngay cả trong trường hợp rất khó xảy ra là NSA hoặc lượt thích thực sự muốn chi hàng triệu đô la để phá khóa công khai của bạn, macbook của bạn vẫn sẽ an toàn (hoặc không. Nghĩ về điều đó, nếu ai đó muốn chi tiêu nhiều như vậy, bạn sẽ tham gia rắc rối :)

Chứng chỉ công khai này thực sự là những gì bạn sẽ đặt trên thanh máy chủ từ xa .

b) Làm cách nào để đặt chứng chỉ công khai của tôi trên máy chủ?

Hai lựa chọn.

  1. Sử dụng ssh-copy-idnếu có sẵn : bob@foo$ ssh-copy-id bob@bar. Làm xong.
  2. Nếu không , hãy sao chép ~/.ssh/id_rsa.pubvào thanh :

    bob @ foo $ sftp ~ / .ssh / id_rsa.pub bob @ bar: pub_cert

(ở đây, bạn đã sao chép chứng chỉ công khai của mình id_rsa.pubtừ .ssh/, trong ~thư mục cá nhân của bạn sang thanh máy tính từ xa trong thư mục nhà của người dùng bob . Đây là mặc định. Cũng lưu ý rằng id_rsa.pubđã được đổi tên thành pub_certtrong quá trình. Tôi sftpchỉ sử dụng để hiển thị cho bạn rằng nó có thể được sử dụng chính xác như scp).

Bây giờ, chúng tôi sẽ sao chép chứng chỉ này đến đúng vị trí:

bob@foo$ ssh bob@bar

Bây giờ bạn đang ở trong thư mục cá nhân của bob trong thanh .

bob@bar$ cat pub_cert >> .ssh/known_hosts

(ở đây, bạn hiển thị nội dung của pub_cert với catNhưng thay vì in nó ra màn hình, bạn chuyển hướng đầu ra này vào một tập tin:. .ssh/known_hosts. Lưu ý rằng một chuyển hướng với >có nghĩa là "thay thế nội dung của tập tin với dòng này", trong khi >>phương tiện " nối thêm luồng ở cuối tệp hiện có ").

c) Kết quả?

Bây giờ bạn có thể scp/ sftp/ sshđến bar nhiều như bạn muốn mà không cần phải cung cấp một mật khẩu. Bạn cũng có thể tự động hoàn thành các đường dẫn cục bộ và từ xa bằng phím [tab].

d) Điều gì về bảo mật mac của tôi?

Với cách làm này, bạn thậm chí không cần máy chủ SSH đang chạy trên máy tính của mình. Chỉ một máy khách SSH ( scp/ sftp/ sshchương trình). Điều này là an toàn cho bạn ngay cả khi thanh bị xâm phạm.

e) Tôi đã làm gì chính xác với các khóa / chứng chỉ này?

Trước tiên, bạn tạo một vài tệp: khóa riêng và chứng chỉ chung. Bạn có thể làm rất nhiều thứ liên quan đến bảo mật và xác thực với chúng. Nhưng trong trường hợp của chúng tôi, với một chút đơn giản hóa, chúng được sử dụng theo cách này:

Khi bạn cố gắng kết nối với thanh , bạn sẽ quảng cáo rằng bạn đã có chứng chỉ mà bạn có thể sử dụng cho kết nối. thanh sẽ kiểm tra các vị trí khác nhau trong hệ thống, bao gồm ~/.ssh/known_hosts. Nó sẽ tìm thấy chứng chỉ mà bạn đã quảng cáo và sử dụng nó để gửi cho bạn dữ liệu được mã hóa.

Trên thực tế, chứng chỉ công cộng có thể mã hóa công cụ!

Bây giờ điều này là tuyệt vời, nhưng làm thế nào foo có thể hiểu điều đó? Sử dụng khóa riêng của bạn.

Khóa riêng có thể giải mã nội dung được mã hóa bằng chứng chỉ công khai tương ứng!

Đây là những gì được gọi là mã hóa bất đối xứng.

Sau đó, về cơ bản, máy chủ sẽ gửi mật khẩu phức tạp cho bạn được mã hóa bằng chứng chỉ công khai của bạn. Bạn sẽ nhận được nó, giải mã nó bằng khóa riêng của bạn và bắt đầu sử dụng nó để mã hóa dữ liệu với máy chủ theo cả hai cách.


Bây giờ, nếu bạn thực sự muốn làm mọi thứ theo cách của bạn và SCP trở lại foo thì sao?

Bạn chỉ đang yêu cầu rắc rối. Nhưng để giảm thiểu ảnh hưởng của sự thỏa hiệp có thể xảy ra, bạn có thể thiết lập một SFTPmáy chủ chỉ được chroot . scpsshsẽ không hoạt động nữa, nhưng sftp, Filezilla và những thứ sẽ hoạt động.

ref: https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/


5

Nếu bạn nhìn vào định dạng của authorized_keystệp, bạn sẽ thấy bạn có thể hạn chế lệnh được phép sử dụng với một khóa cụ thể. Đây là phương pháp mà trước đây tôi đã sử dụng để cho phép hành động SSH với một khóa được chỉ định chỉ trong một lệnh cụ thể, scptrong trường hợp này. Nhìn vào trang người đàn ông bằng cách sử dụng man authorized_keys.


Làm thế nào để một người nhìn vào 'man ủy quyền'? Tôi gõ nó vào terminal .. chỉ là một lỗi.
Hermann Ingjaldsson

Tôi có Ubuntu và nó có trang người đàn ông này. Các phiên bản Linux khác dường như không có trang hướng dẫn này (từ nhận xét của bạn). Tôi chắc chắn rằng bạn có thể sử dụng trình duyệt của mình và tìm kiếm ủy quyền trong google, phải không?
mdpc


1

Như những người khác tôi muốn đề nghị bạn sao chép trực tiếp từ máy khác của bạn:

bob@foo$ scp bar:/guest/buzz ~

Nếu vì bất kỳ lý do gì, bạn muốn bắt đầu sao chép từ thanh, bạn có thể tạo một khóa ssh trên foo cho phép foo đăng nhập vào foo. Sau đó, bạn có thể sử dụng tác nhân ssh để chuyển khóa qua cùng một kết nối.

bob@foo$ ssh -A bar
password:
bob@bar$ scp /guest/buzz bar:
# no password prompt

Bạn cũng có thể sao chép khóa chung vào thanh sau đó sẽ không có dấu nhắc mật khẩu hoặc bạn có thể thêm cụm mật khẩu vào khóa, nhập mã này khi ssh'ing vào thanh, do tác nhân ssh, bạn sẽ không cần nó cho kết nối ngược lại trong khi được an toàn.

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.