Cách tiếp cận ưa thích của tôi là sử dụng tệp cấu hình SSH (được mô tả bên dưới), nhưng có một vài giải pháp khả thi tùy thuộc vào cách sử dụng của bạn.
Đối số dòng lệnh
Tôi nghĩ rằng câu trả lời tốt nhất cho phương pháp này là câu trả lời của christianbundy cho câu trả lời được chấp nhận:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
Sử dụng dấu ngoặc kép sẽ cho phép bạn sử dụng các biến từ máy cục bộ của mình, trừ khi chúng được thoát (như $SHELL
ở đây). Ngoài ra, bạn có thể sử dụng các trích dẫn đơn và tất cả các biến bạn sử dụng sẽ là các biến từ máy đích:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Hàm Bash
Bạn có thể đơn giản hóa lệnh bằng cách gói nó trong hàm bash. Giả sử bạn chỉ muốn gõ này:
sshcd example.com /foo/bar
Bạn có thể thực hiện công việc này bằng cách thêm nó vào ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Nếu bạn đang sử dụng một biến tồn tại trên máy từ xa cho thư mục, hãy chắc chắn thoát nó hoặc đặt nó trong dấu ngoặc đơn. Ví dụ, điều này sẽ cd vào thư mục được lưu trữ trong JBOSS_HOME
biến trên máy từ xa:
sshcd example.com \$JBOSS_HOME
Tập tin cấu hình SSH
Nếu bạn muốn thấy hành vi này mọi lúc cho các máy chủ cụ thể (hoặc bất kỳ) nào bằng lệnh ssh bình thường mà không phải sử dụng các đối số dòng lệnh bổ sung, bạn có thể đặt RequestTTY
và RemoteCommand
các tùy chọn trong tệp cấu hình ssh của mình.
Ví dụ: tôi chỉ muốn gõ lệnh này:
ssh qaapps18
nhưng muốn nó luôn luôn hoạt động như lệnh này:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Vì vậy, tôi đã thêm nó vào ~/.ssh/config
tập tin của mình :
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Bây giờ quy tắc này áp dụng cho bất kỳ máy chủ lưu trữ nào có "ứng dụng" trong tên máy chủ của nó.
Để biết thêm thông tin, hãy xem http://man7.org/linux/man-pages/man5/ssh_config.5.html