2011-07-14 26 views
5

Có vẻ như trong this question, câu trả lời là tách biệt các câu lệnh bằng dấu chấm phẩy. Tuy nhiên, điều đó có thể trở nên rườm rà nếu chúng ta gặp phải các kịch bản phức tạp với nhiều câu lệnh if và các chuỗi trích dẫn phức tạp. Tôi sẽ nghĩ. Tôi tưởng tượng một lựa chọn khác sẽ đơn giản là phát hành nhiều lệnh SSH sau lệnh kia, nhưng một lần nữa sẽ rất cồng kềnh, cộng với tôi không được thiết lập để xác thực khóa công khai/riêng tư, điều này sẽ yêu cầu mật khẩu thời gian.Cách khác để phát hành nhiều lệnh trên máy từ xa bằng SSH?

Điều tôi lý tưởng nhất là tương tự như trải nghiệm vỏ tương tác: tại một thời điểm trong tập lệnh bạn ssh vào @ the_remote_server và nó nhắc nhập mật khẩu mà bạn nhập vào (tương tác) và sau đó từ điểm đó cho đến khi tập lệnh của bạn phát hành lệnh "thoát", tất cả các lệnh trong tập lệnh được diễn giải trên máy từ xa.

Tất nhiên điều này không làm việc:

ssh [email protected] 
    cd some/dir/on/remote/machine 
    tar -xzf my_tarball.tgz 
    cd some/other/dir/on/remote 
    cp -R some_directory somewhere_else 
exit 

Có thay thế khác? Tôi cho rằng tôi có thể lấy phần đó ra khỏi kịch bản của tôi và dán nó vào một kịch bản trên máy chủ từ xa. Meh. Bây giờ tôi đang duy trì hai kịch bản. Thêm vào đó, tôi muốn một tập tin cấu hình nhỏ để giữ mặc định và các thứ khác và tôi cũng không muốn duy trì nó ở hai nơi.

Có giải pháp nào khác không?

Trả lời

9

Sử dụng một heredoc.

ssh [email protected] << EOF 
cd some/dir/on/remote/machine 
tar -xzf my_tarball.tgz 
cd some/other/dir/on/remote 
cp -R some_directory somewhere_else 
EOF 
+0

nổi bật. Cảm ơn! –

+0

vì tập lệnh heredoc của bạn trở nên phức tạp hơn (với các biến đặc biệt), bạn sẽ muốn trích dẫn dấu phân cách heredoc: '<< 'EOF''. Sau đó, các heredoc sẽ được gửi theo nghĩa đen đến máy từ xa và vỏ địa phương của bạn sẽ không cố gắng để giải thích nó. –

3

Sử dụng heredoc cú pháp, như

ssh [email protected] <<EOD 
cd some/dir/on/remote/machine 
... 
EOD 

hoặc đường ống, như

echo "ls -al" | ssh [email protected] 
+0

+1 cảm ơn cho ý tưởng đường ống là tốt! –

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