SSH đến máy chủ, thực thi lệnh và duy trì kết nối


12

Tôi muốn viết một kịch bản mở một thiết bị đầu cuối với các tab khác nhau, đăng nhập vào máy chủ bằng cách sử dụng sshtrong mỗi tab và thực hiện một lệnh trong mỗi tab. Ví dụ : htop.

Kịch bản dưới đây mở một thiết bị đầu cuối với 4 tab tất cả đăng nhập trên máy chủ. Nhưng nếu tôi cố thêm htoplệnh trong cmd=dòng thì nó không hoạt động nữa ...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

Tôi đã thử điều này ...

cmd="bash -c 'ssh user@host htop';bash"

... bởi vì ssh --helpnói rằng cú pháp cho sshlà:

cách sử dụng: ssh [user @] hostname [lệnh]

Câu trả lời:


14

Ở dạng đơn giản nhất:

ssh -t user@host "command; bash"

-tlà phần quan trọng ở đây. Nó buộc máy chủ phải phân bổ một thiết bị đầu cuối ảo cho quy trình, cho phép nó duy trì mở.

Nếu bạn chỉ muốn chạy htop trên một tải máy chủ, bạn có thể bỏ qua bashphần cuối nhưng điều đó có nghĩa là nếu bạn thoát khỏi htop, bạn sẽ quay trở lại thiết bị đầu cuối cục bộ.


Tôi đã thử cmd = "bash -c 'ssh -t user @ host htop'; bash". Nó hoạt động nhưng nếu tôi thoát khỏi htop, tôi quay trở lại thiết bị đầu cuối địa phương và tôi không muốn điều này xảy ra
Red

1
@Red Kiểm tra báo giá của bạn - chúng ở khắp mọi nơi - bạn cần nhóm htop và bash với nhau để cả hai đều chạy trên máy chủ từ xa. bash -c 'ssh -t user@host "htop;bash"'sẽ tốt hơn nhưng tôi không hiểu tại sao bạn lại cố gắng chiên thứ này trong một gói bash ở nơi đầu tiên. Không bắt buộc - bạn chỉ chạy một lệnh cục bộ.
Oli

Cảm ơn bạn, bây giờ nó hoạt động với cmd = "ssh -t user @ host htop; bash"
Red

Một câu trả lời tốt, nhưng phải có một cái gì đó tốt hơn để sử dụng hơn bash để không chấm dứt.
mc0e

@ mc0e Phụ thuộc vào những gì bạn muốn làm. Câu hỏi này là về việc nhận được một shell hữu ích sau khi chạy lệnh của bạn. Nếu bạn chỉ muốn tạm dừng, bạn có thể thay thế bashcho read.
Oli
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.