Về cơ bản, tôi muốn chạy một tập lệnh trên máy A, nó sẽ SSH vào máy B, thực thi các lệnh trên B và trả lại đầu ra cho máy A.
Vì vậy, tôi đang tạo một kịch bản csh để làm điều này, hy vọng, nếu nó có thể.
Chẳng hạn, giải pháp từ câu trả lời này hoạt động từ dòng lệnh:
ssh user@host << 'ENDSSH'
ls -l
ENDSSH
Tôi có thể xác minh nó đang chạy ls trên remote chứ không phải cục bộ.
Tuy nhiên tôi muốn có thể làm điều này trong backticks, bên trong tập lệnh csh của tôi chạy cục bộ. Điều đó có thể không?
Tôi biết có thể SSH vào và chạy một tập lệnh trên điều khiển từ xa, nhưng đó không phải là trường hợp của tôi.
Tôi cũng đã nghe nói có thể gửi một tập lệnh thứ hai được lưu trữ cục bộ qua SSH (mà tôi cũng chưa tìm ra), nhưng tôi thích ý tưởng có tất cả các lệnh bên trong tập lệnh gốc, do đó là HEREDOC.
Tôi biết đó là một câu hỏi khá đặc biệt, nhưng nếu có một cách, nó sẽ rất tuyệt để biết làm thế nào.
Những thứ không hoạt động
1)
`ssh user@host<<'ENDSSH'`
`echo "ls -l"`
`echo "ENDSSH"`
Điều này đưa ra lỗi:
stty: standard input: Invalid argument.
stty: standard input: Invalid argument.
Warning: Command not found
Và sau đó nó chạy ls -l
cục bộ, và sau đó nó cố chạy ENDSSH
cục bộ và tất nhiên không thành công với lệnh không tìm thấy.
2)
`ssh user@host<<'ENDSSH'`
echo "ls -l"
echo "ENDSSH"
Vấn đề tương tự như trên, ngoại trừ nó chỉ hiển thị ls -l
và ENDSSH
dưới dạng văn bản. Có nghĩa là ... vì phần HEREDOC không thành công.
3) 3-5 không chính xác những gì tôi đã hỏi, nhưng vẫn cố gắng để làm cho ngay cả trường hợp cơ bản hoạt động.
`ssh user@host ls-l`
Điều này trả về total: Command not found.
Yeah, tôi không biết nơi đó đến từ đâu.
4)
`cat ./test.csh | ssh user@host`
Cũng trả về giống như lần thử số 1
5)
`cat ./test.csh | ssh -t user@host`
Tương tự như # 1 và 4.
Tôi bắt đầu sử dụng hết các giải pháp khác từ stackoverflow / Ubuntu / serverfault ... vv. Hầu hết mọi người hỏi về cách chạy tập lệnh của họ trên một điều khiển từ xa từ dòng lệnh, chứ không phải làm thế nào để chạy các lệnh trên một điều khiển từ một tập lệnh đang chạy cục bộ.
Biên tập
Vâng, tôi nghĩ rằng tôi có một phần của vấn đề đã tìm ra. Ví dụ với trường hợp 3 ở trên, những gì xảy ra được ls -l
chạy cục bộ và phần đầu tiên của đầu ra sau đó được gửi qua SSH dưới dạng một lệnh.
Tôi nhận thấy điều này bởi vì tôi đã cố gắng ssh user@host $CMD
, với $CMD
thiết lập "whoami"
. Đầu ra là username: Command not found
, và sau đó tôi nhận ra total
là từ đầu ra ls. Vẫn không chắc chắn về cách giải quyết điều này, mặc dù
ssh user@host ls -l
, mà lần lượt chạy ls -l
trên máy chủ từ xa. Đầu ra kết quả được lấy bởi các backticks và được đánh giá cục bộ, bởi vì không có gì để thu thập đầu ra đó, cuối cùng được thực thi như một lệnh cục bộ.
ls -l
từ xa và đầu ra cục bộ, trái ngược với ls -l
cục bộ và đầu ra từ xa?