2009-10-27 33 views
14

Tôi muốn một lệnh ssh'es vào máy, chạy lệnh (cd hoặc thực thi tập lệnh hoặc su), rồi đưa cho tôi trình bao. Việc chuyển lệnh đến ssh dường như luôn luôn thoát.ssh với lệnh .... Cộng với vỏ

Một số ví dụ về những gì tôi đang tìm kiếm: 'ssh me @ machine1 "./executeMyScript & & cd/developmentDirectory"' và sau đó nó mang lại cho tôi trình bao của tôi trở lại.

Lý do tôi muốn làm điều này là vì tôi đang sử dụng mrxvt (các thuật ngữ x theo thẻ) cho phép tôi xác định lệnh cho tất cả các tab của mình thực thi khi khởi động. Tôi muốn có một vài kết nối ssh cho cùng một máy nhưng có họ làm những việc khác nhau sau khi sshing.

-Rob

Cảm ơn!

Trả lời

10

Biến thể trên câu trả lời khác thực sự, sử dụng tùy chọn -t của ssh để buộc phân bổ pseudo-tty:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

cảm ơn! về kiểm tra đầu tiên, hoạt động chính xác như tôi muốn! Hoan hô cho "-t"! – robarson

+0

Mặc dù câu hỏi này đã được trả lời một cách phù hợp, nếu ai đó đọc, bạn có biết cách tôi có thể có bash mà tôi bắt đầu bằng lệnh này mở các emacs (để khi tôi đóng các emacs, nó quay trở lại thiết bị đầu cuối bash của tôi) ? Heck..một cái gì đó mà mở ra emacs mà không bash sẽ là tốt (như vậy emacs không thoát khỏi ngay lập tức sau khi bắt đầu). – robarson

4

Làm thế nào về

ssh [email protected] ./executeMyScript '&&' bash -i 

Bạn cần phải trích dẫn && vì vậy nó sẽ được thông qua vào máy từ xa thay vì nuốt vỏ địa phương.

Trích một nhân vật ';' và bạn có thể thay đổi thư mục bắt đầu của bạn, quá:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Cảm ơn. Cuộc gọi để bash hoạt động ...infosar vì nó đã cho tôi một vỏ. Thật không may nó không hoạt động rất tốt .. phím tắt đơn giản như ctrl^a không làm việc có nghĩa là tôi cần phải thử và tìm một giải pháp khác nhau. btw, nó cũng in ra "bash: không có điều khiển công việc trong shell này". – robarson

+3

Hãy thử với tùy chọn '-t':' ssh -t me @ machine ... ' – mob

2

Đặt một cái gì đó như thế này ở phần cuối của kịch bản bạn muốn chạy:

bash -li 

Đó bắt đầu Bash như một vỏ đăng nhập tương tác. Nó không hoàn hảo, vì bạn sẽ bỏ lỡ những thứ như chuyển tiếp TERM, nhưng nó có thể phù hợp với nhu cầu của bạn.

Nếu nó không phải là đủ, tôi chỉ muốn thực hiện hai cuộc gọi ssh riêng biệt, một để chạy các kịch bản và khác để đăng nhập tôi trong.

+0

+1 cho hai lệnh ssh riêng biệt. KISS –

2

Làm thế nào về việc sử dụng tùy chọn SendEnv trong ssh_config để gửi một môi trường cụ thể tùy chọn từ máy cục bộ của bạn đến máy từ xa của bạn theo dõi bằng cách kiểm tra biến môi trường đó trong cấu hình của máy chủ từ xa?

Trong bạn .ssh/đặc biệt-config-file:

remotehost: 
    SendEnv * 

kịch bản địa phương của bạn:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

.bash_profile từ xa của bạn:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Bạn có thể cần phải kiểm tra một số trong những dòng này, tôi chỉ ném chúng lại với nhau từ các trang của người đàn ông và đã không thử bất kỳ điều nào trước đây. Cá nhân tôi không thích phải sửa đổi cả môi trường cục bộ lẫn từ xa của tôi cho giải pháp này.

0

này làm việc cho tôi.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

Tại sao nó làm việc cho bạn? Cung cấp thêm một chút chi tiết để OP có thể hiểu tại sao bạn viết những gì bạn đã làm. – rayryeng

+1

Nó cũng là một bản sao trực tiếp hoặc ít hơn của câu trả lời đã chọn hiện tại, được đăng cách đây 4 năm ... – Synchro

+0

Lời giải thích sẽ rất hay. –