Làm thế nào để SSH vào một thư mục cụ thể?


39

Tôi thường xuyên đăng nhập vào một máy chủ, sau đó cd vào một thư mục cụ thể. Có thể đơn giản hóa hai lệnh này thành một?

ssh bob@foo  
cd /home/guest

Tôi muốn tránh thay đổi bất cứ điều gì trên 'foo' nếu có thể, vì tôi sẽ phải xóa nó với quản trị viên máy chủ. Tôi sử dụng bash, nhưng tôi mở để trả lời trong các shell khác.

Câu trả lời:


22

Chỉ cần đặt làm dòng cuối cùng của tệp ~ bob / .bash_profile của bạn trên foo:

cd /home/guest >& /dev/null

Bây giờ mỗi khi bạn đăng nhập (cho dù bằng SSH hay cách khác), lệnh cd sẽ chạy. Không có mucking xung quanh với ssh là cần thiết.

Tôi biết bạn đã viết rằng bạn "muốn tránh thay đổi bất cứ điều gì trên 'foo' nếu có thể", nhưng nếu tài khoản bob @ foo là của bạn, việc thay đổi .bash_profile của riêng bạn có được chấp nhận không?


2
Tại sao có, tôi nghĩ rằng điều này sẽ làm việc tuyệt vời. Tôi sẽ không cần phải xin phép CNTT để thực hiện thay đổi đó. Bạn có thể giải thích lý do tại sao bạn cần> & / dev / null?
kẻ phá hoại

6
Tôi nghĩ rằng nên được &> /dev/null. Nó ngăn chặn bất kỳ thông báo lỗi nào có thể được hiển thị chỉ trong trường hợp cd không thể thay đổi thư mục thành / home / thư mục. Nếu bạn muốn xem những tin nhắn đó, bạn có thể loại trừ điều đó.
konsolebox

5
>&&>giống nhau ở Bash. Phong cách thứ hai được ưa thích mặc dù.

Ngoài ra, việc chuyển hướng đến / dev / null sẽ ngăn tên của thư mục bị lặp lại trên màn hình, điều mà "cd" có thể làm.
DanB

41

Điều này hoạt động với OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

Đối số cuối cùng chạy trong vỏ đăng nhập của bạn. Các -tlá cờ truyền cho sshlực lượng sshđể phân bổ một pseudo-thiết bị đầu cuối, đó là cần thiết cho một vỏ tương tác. Các -llá cờ truyền cho bashbắt đầu bash như một vỏ đăng nhập .


3
Tôi tự hỏi, liệu thêm tùy chọn -l vào bash cũng hữu ích chứ? ... && exec bash -l
konsolebox

1
@konsolebox: Đó là một ý tưởng tốt. Tôi đã thêm nó vào câu trả lời của tôi.

17

Bạn cũng có thể làm theo cách này, tương tự như giải pháp của @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

Hoặc nếu bạn không biết vỏ ở đầu bên kia:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

Hoặc như thế này:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
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.