Sao chép an toàn trên hai IP trên cùng một mạng vào máy cục bộ


0

Tôi đang cố gắng viết một tập lệnh bash để ssh trước vào IP1 (yêu cầu mật khẩu) từ máy localhost của tôi và sau đó ssh vào IP2. Khi ở IP2, tôi muốn truy cập vào máy cục bộ của mình.

IP1=192.168.10.10
IP2=192.168.10.9

ssh root@$IP1
ssh root@$IP2

cd /var/log

scp message* localuser@$localIP:/home/localuser/Desktop/MessageFolder/

Trên đây là những gì tôi hiện phải làm thủ công thông qua dòng lệnh trong Linux. Tôi chủ yếu sao chép từ 192.168.10.9 sang máy cục bộ của mình

Tôi không có quyền truy cập trực tiếp vào IP2. Hãy nghĩ về nó như một cửa hậu. IP2 có mật khẩu, IP1 thì không.

Có cách nào để làm điều này? Tôi có nhiều mã được viết nếu điều này không hữu ích.

Ai đó có thể xác minh xem tôi có thể làm điều gì đó tương tự như những gì đã được thực hiện cho giải pháp này không: Scp qua proxy với một lệnh từ máy cục bộ?

Tôi cũng đã nghe nói về chuyển tiếp cổng ... Làm thế nào nó hoạt động với ví dụ này?

Tôi rất mới với bash scripting và sẽ đánh giá cao sự kiên nhẫn.


Ít nhất tôi sẽ không khuyên bạn nên làm rối với cấu hình ssh của người dùng gốc hoặc bạn có thể tự khóa máy. Nếu bạn muốn thử đường dẫn ssh config, chắc chắn sử dụng một người dùng khác.
BeowulfNode42

Câu trả lời:


0

SSH đi kèm với sự hỗ trợ cho điều đó. Tôi sẽ trích dẫn câu trả lời từ đây :

Theo trang man ssh, ProxyCommand là phương thức đúng

cú pháp là:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

Hoặc, trên một hệ thống đủ gần đây:

Kể từ OpenSSH 7.3 (cuối năm 2016), cách dễ nhất là cài đặt ProxyJump . Trong của bạn ~/.ssh/config:

Host B
  ProxyJump A

Hoặc trên dòng lệnh , -J B.

Giải pháp sau thậm chí hỗ trợ các chuỗi sâu tùy ý, xem hướng dẫn được liên kết.

Với SCP, bạn không thể sử dụng -J, vì vậy nó sẽ giống như thế này:

scp -o "ProxyJump root@$IP1" root@$IP2:/var/log/message* /home/localuser/Desktop/MessageFolder/

0

Bạn không thể bắt đầu một tập lệnh trên một máy, sau đó ssh vào một máy khác và để tập lệnh tiếp tục ở đó.

Nhưng bạn có thể thực thi một chuỗi các lệnh trên một máy từ xa như thế này:

ssh -t root@IP1 'ssh root@IP2 scp /var/log/message*  <user>@<IP>:/home/localuser/Desktop/MessageFolder/; ls /var/log/message*'

Điều này được nói sshvào IP1 và chuyển phần còn lại của dòng dưới dạng một lệnh để chạy sau khi đăng nhập.

Trong dấu ngoặc kép là lệnh để chạy, đó là ssh vào IP thứ hai, cùng với lệnh để chạy khi đã đăng nhập vào đó.


Điều đó có ý nghĩa. Tôi nghĩ trong câu đầu tiên của bạn mặc dù bạn đã hiểu sai những gì tôi đang đề cập nhưng bạn hiểu khái niệm này. Có vẻ như bạn nói rằng máy của tôi đang ở IP1 và không phải vậy .. không có gì to tát! Nếu tôi có nhiều bản sao tôi cần phải làm thì sao? Tức là tin nhắn scp * và đăng nhập * ??
JWorkin

Tôi thực sự muốn sử dụng tùy chọn này ... Tôi có thể bao gồm nhiều lệnh sau localuser @ $ localIP: / home / localuser / Desktop / MessageFolder / như nhiều scp và rm không?
JWorkin

@JWorkin Chắc chắn, chỉ cần tách biệt với dấu hai chấm
Paul

Tôi nhận được lỗi sau: "Thiết bị đầu cuối giả sẽ không được phân bổ vì stdin không phải là thiết bị đầu cuối" Tôi có nên sử dụng ssh -tt không?
JWorkin

@JWorkin Trong bài kiểm tra của tôi, một bài -tlà đủ (câu trả lời được cập nhật) bạn đã thử chưa?
Paul

0

Vì vậy, hãy để tôi nói thẳng điều này:

  • localIP muốn các tệp trong / home / localuser / Desktop / MessageFolder /
  • các tệp mong muốn có trên IP2 tại / var / log / message *
  • Cách duy nhất để truy cập IP2 là từ IP1

Bạn sẽ cần xem xét việc sử dụng ssh / scp bằng cách sử dụng các khóa thay vì mật khẩu như được mô tả bởi https://wiki.archlinux.org/index.php/SSH_keys . Tôi cũng sẽ khuyên không sử dụng người dùng root cho hoạt động cơ bản này.

Giả sử những giả định đó là chính xác, bạn có thể sử dụng khả năng tạo đường hầm của SSH để máy localIP có thể ssh / scp vào 127.0.0.1:SomeUnusePort để truy cập IP2. Phần khó khăn chính sẽ là khi nào nên ngắt kết nối máy localIP khỏi máy IP1.

Đây là một khối mã nhanh để làm những gì tôi nghĩ. Hãy lưu ý, tôi đã không kiểm tra điều này cả.


IP1=192.168.10.10
IP2=192.168.10.9
SomeUnusedPortOnLocalIP=2209

ssh -L $SomeUnusedPortOnLocalIP $IP2:22 root@$IP1 "while [ ! -f /tmp/disconLocalIP.now ]; do sleep 2; done; rm /tmp/disconLocalIP.now " &
# connects to IP1 establishing an ssh tunnel between localIP and IP2
# the loop testing for the existence of a file to let it know when to disconnect
# the & symbol lets the command run in the background and the script to continue with it still running

# wait for the connection to actually establish fully before proceeding.
sleep 10 

# connect to port tunnel on localIP to get files from IP2
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/message* /home/localuser/Desktop/MessageFolder/
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/log* /home/localuser/Desktop/OtherLogs/

# put file on IP1 to tell loop to end and exit previous ssh session
ssh root@$IP1 "touch /tmp/disconLocalIP.now"


Nếu tôi có nhiều bản sao tôi cần phải làm thì sao? Tức là tin nhắn scp * và nhật ký scp *?
JWorkin

Bạn chỉ có thể đặt nhiều dòng scp lần lượt, trước lệnh ssh cuối cùng cho biết kết nối tới IP1 để đóng.
BeowulfNode42
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.