SSH là viết tắt của secure shell. Đây là giao thức đăng nhập từ xa được mã hóa. Sau khi thiết lập trên mỗi nút, nó có thể được sử dụng để giao tiếp với nhiều nút khác trong mạng đó.
Hai lệnh này đặt vị trí mặc định là /home/pi/_ssh/id_rsa để lưu trữ khóa.
Nếu được yêu cầu nhập mật khẩu, hãy để mật khẩu trống. Sau khi hoàn tất, bước tiếp theo là gửi khóa công khai đến nút công nhân. Vì vậy, hãy đảm bảo rằng nút công nhân của bạn đã được kết nối với mạng. Bây giờ chúng ta có thể thiết lập khóa mã hóa trên nút worker, do đó địa chỉ IP được sử dụng là địa chỉ IP của nút worker. Chạy lệnh sau trên nút master.
Sau khi khóa SSH được tạo, chúng ta có thể đăng nhập vào bất kỳ nút nào khác mà khóa đã được gửi từ nút master và để thực hiện việc này, hãy sử dụng lệnh:
Trong lệnh trên, "pi" biểu thị người dùng, theo mặc định, tất cả PI sử dụng Raspbian sẽ có người dùng là "pi" và "192.168.3.216" là IP của máy khách của tôi. bạn sẽ phải thay đổi nó để biểu thị địa chỉ IP của PI máy khách của bạn.
Điều này sẽ yêu cầu nhập mật khẩu. Sau khi bạn đăng nhập, tất cả các lệnh bạn nhập sẽ chạy trên nút đó chứ không phải trên máy chủ chính, nhưng đầu ra sẽ được hiển thị trên chính máy chủ chính. SSH cũng có thể được sử dụng để chạy lệnh trực tiếp trên các nút khác. Ví dụ, để thay đổi tên máy chủ của các nút khác nhau, hãy sử dụng các lệnh này theo định dạng như sau:
Như đã trình bày ở trên, chúng ta có thể sử dụng SSH để chạy lệnh trong các nút/PI khác mà không cần thực sự đăng nhập vào chúng. Sau đây là một ví dụ khác để tắt an toàn một nút trong mạng có địa chỉ IP 192.168.3.216
Hình sau đây cho thấy cách SSH được sử dụng để đăng nhập vào một nút worker (192.168.3.216) và từ nút worker, lấy lại thiết bị đầu cuối điều khiển cho nút master.
Như có thể thấy trong hình trên, việc đăng nhập vào một nút worker diễn ra trực tiếp, tức là không cần nhập mật khẩu ngoại trừ lần đầu tiên. Nhưng mỗi lần quyền điều khiển của thiết bị đầu cuối trở lại nút master (192.168.3.215), thông tin đăng nhập phải được nhập. Theo cách này, nút master luôn được bảo vệ khỏi mối đe dọa bên ngoài.
Vì vậy, sau khi phát lệnh qua SSH tới các nút khác, có thể có những tình huống dữ liệu phải được gửi đến nhiều nút. Nếu số lượng nút nhỏ, thì chúng ta có thể đăng nhập thủ công vào từng nút, kết nối nút đó với màn hình và bàn phím, rồi gửi tệp. Nhưng đây là cách thực hiện rất kém hiệu quả khi kích thước của cụm lớn. Một cách dễ hơn là sử dụng SCP để gửi tệp. Cài đặt SCP bằng lệnh:
sudo apt-get install scp
Xin lưu ý rằng một số hệ điều hành Linux có thể cài đặt sẵn SCP, nhưng Raspbian mà chúng tôi đang sử dụng thì không có. Lệnh chung để gửi một tệp duy nhất là:
scp (đường dẫn của tệp trên thiết bị cục bộ) [emailprotected] (đường dẫn của vị trí từ xa)
Ví dụ:
Tại đây, thiết bị từ xa để gửi dữ liệu đến được nhận dạng bởi địa chỉ IP. Nhiều tệp trong một thư mục có thể được gửi bằng tùy chọn đệ quy (-R). Ví dụ:
Lệnh trên đệ quy chuyển tất cả các tệp trong /pi/project từ máy chủ cục bộ sang thư mục đệ quy trong máy chủ từ xa được xác định bởi địa chỉ IP.
Hình ảnh bên dưới minh họa các lệnh ssh và scp khác nhau. Lệnh bắt đầu bằng cách liệt kê nội dung của thư mục hiện tại, sau đó gọi "scp" đệ quy để chuyển tất cả các tệp trong thư mục hiện tại sang một thư mục trong một nút khác. Sau đó, lệnh đăng nhập vào nút khác và hiển thị rằng scp đã chuyển thành công nội dung đến đích.
SCP có thể được sử dụng với một số tùy chọn khác để thực hiện chuyển giao nhằm đáp ứng một số điều kiện của chúng tôi. Sau đây là một số tùy chọn:
Ở đây chúng ta có thể thấy rằng có thể sử dụng nhiều tùy chọn và cả hai tính năng của chúng sẽ được áp dụng cho lệnh.
[*]
Lập trình socket liên quan đến việc gửi và nhận dữ liệu qua các cổng và SCP có thể được sử dụng để gửi dữ liệu qua các cổng cụ thể đến máy chủ từ xa. Điều này có thể được thực hiện bằng tùy chọn "-P". Ví dụ:
Ở đây, cổng được sử dụng để gửi dữ liệu là 1938.
[*]
Có thể có những trường hợp, bạn không muốn biết trạng thái truyền tệp, như trong hình ảnh ở trên. Việc tắt trạng thái truyền khi có một lượng lớn tệp là hợp lý. Chúng ta có thể thực hiện điều đó bằng cách sử dụng tùy chọn "-q". Ví dụ:
Tại đây, nội dung của thư mục có tên là files được chuyển đến thư mục files trên một nút khác, nhưng thanh trạng thái và thông báo gỡ lỗi đều bị vô hiệu hóa, không hiển thị.
Những lợi ích chính của SSH là:
- SSH sử dụng thuật toán mã hóa RSA để tạo khóa công khai và khóa riêng, khiến việc xâm nhập trở nên cực kỳ khó khăn.
- Vì SSH là giao thức đăng nhập từ xa nên có thể được cấu hình trên máy tính xách tay. Điều đó có nghĩa là bạn có thể sử dụng máy tính xách tay của mình để kết nối không dây với cụm Raspberry Pi.
- Vì các giao thức như SCP (Sao chép an toàn) và SFTP (Giao thức truyền tệp an toàn) chạy trên SSH, bạn có thể sử dụng chúng để truyền tệp và thư mục trực tiếp từ nút này sang nút khác.
- SSH hỗ trợ đăng nhập một lần. Điều này có nghĩa là bạn chỉ phải nhập thông tin xác thực khi đăng nhập lần đầu. Từ lần đăng nhập thứ hai trở đi, bạn không cần phải nhập thông tin xác thực.
Mã:
cd ~
ssh-keygen --t rsa --C "raspberrypi@raspberrypi"
Nếu được yêu cầu nhập mật khẩu, hãy để mật khẩu trống. Sau khi hoàn tất, bước tiếp theo là gửi khóa công khai đến nút công nhân. Vì vậy, hãy đảm bảo rằng nút công nhân của bạn đã được kết nối với mạng. Bây giờ chúng ta có thể thiết lập khóa mã hóa trên nút worker, do đó địa chỉ IP được sử dụng là địa chỉ IP của nút worker. Chạy lệnh sau trên nút master.
Mã:
cat ~/.ssh/id_rsa.pub | ssh [emailprotected] "mkdir .ssh;cat >> .ssh/authorized_keys"
Mã:
ssh [emailprotected]
Điều này sẽ yêu cầu nhập mật khẩu. Sau khi bạn đăng nhập, tất cả các lệnh bạn nhập sẽ chạy trên nút đó chứ không phải trên máy chủ chính, nhưng đầu ra sẽ được hiển thị trên chính máy chủ chính. SSH cũng có thể được sử dụng để chạy lệnh trực tiếp trên các nút khác. Ví dụ, để thay đổi tên máy chủ của các nút khác nhau, hãy sử dụng các lệnh này theo định dạng như sau:
Mã:
ssh [emailprotected] 'sudo echo "cilent001" | sudo nano /etc/hostname'
ssh [emailprotected] 'sudo echo "cilent002" | sudo nano /etc/hostname'
ssh [emailprotected] 'sudo echo "cilent003" | sudo nano /etc/hostname'
Mã:
ssh [emailprotected] 'sudo poweroff'
Như có thể thấy trong hình trên, việc đăng nhập vào một nút worker diễn ra trực tiếp, tức là không cần nhập mật khẩu ngoại trừ lần đầu tiên. Nhưng mỗi lần quyền điều khiển của thiết bị đầu cuối trở lại nút master (192.168.3.215), thông tin đăng nhập phải được nhập. Theo cách này, nút master luôn được bảo vệ khỏi mối đe dọa bên ngoài.
Vì vậy, sau khi phát lệnh qua SSH tới các nút khác, có thể có những tình huống dữ liệu phải được gửi đến nhiều nút. Nếu số lượng nút nhỏ, thì chúng ta có thể đăng nhập thủ công vào từng nút, kết nối nút đó với màn hình và bàn phím, rồi gửi tệp. Nhưng đây là cách thực hiện rất kém hiệu quả khi kích thước của cụm lớn. Một cách dễ hơn là sử dụng SCP để gửi tệp. Cài đặt SCP bằng lệnh:
sudo apt-get install scp
Xin lưu ý rằng một số hệ điều hành Linux có thể cài đặt sẵn SCP, nhưng Raspbian mà chúng tôi đang sử dụng thì không có. Lệnh chung để gửi một tệp duy nhất là:
scp (đường dẫn của tệp trên thiết bị cục bộ) [emailprotected] (đường dẫn của vị trí từ xa)
Ví dụ:
Mã:
scp /pi/example.c [emailprotected] /pi/project
Mã:
scp -r /pi/project [emailprotected] /pi/project
Hình ảnh bên dưới minh họa các lệnh ssh và scp khác nhau. Lệnh bắt đầu bằng cách liệt kê nội dung của thư mục hiện tại, sau đó gọi "scp" đệ quy để chuyển tất cả các tệp trong thư mục hiện tại sang một thư mục trong một nút khác. Sau đó, lệnh đăng nhập vào nút khác và hiển thị rằng scp đã chuyển thành công nội dung đến đích.
SCP có thể được sử dụng với một số tùy chọn khác để thực hiện chuyển giao nhằm đáp ứng một số điều kiện của chúng tôi. Sau đây là một số tùy chọn:
-
Chúng ta có thể sử dụng tùy chọn "-p" để bảo toàn thời gian sửa đổi, thời gian truy cập và chế độ từ tệp gốc. Ví dụ:
Mã:scp -p test.c [emailprotected]:~/
-
SCP cho phép nén các tệp trước khi chúng có thể được gửi qua mạng đến đích. Điều này rất hữu ích khi các tệp rất lớn để truyền và do đó, việc nén sẽ làm tăng tốc độ gửi tệp. Để thực hiện việc này, chúng ta sử dụng tùy chọn "-C". Ví dụ:
Mã:
scp -pC test.c [emailprotected]:~/
[*]
Lập trình socket liên quan đến việc gửi và nhận dữ liệu qua các cổng và SCP có thể được sử dụng để gửi dữ liệu qua các cổng cụ thể đến máy chủ từ xa. Điều này có thể được thực hiện bằng tùy chọn "-P". Ví dụ:
Mã:
scp -P 21938 test.c [emailprotected]:~/
[*]
Có thể có những trường hợp, bạn không muốn biết trạng thái truyền tệp, như trong hình ảnh ở trên. Việc tắt trạng thái truyền khi có một lượng lớn tệp là hợp lý. Chúng ta có thể thực hiện điều đó bằng cách sử dụng tùy chọn "-q". Ví dụ:
Mã:
scp -rq ~/files [emailprotected]:~/files