Chọn shell mà SSH sử dụng?


31

Làm cách nào để đặt shell được sử dụng khi người dùng SSH vào máy chủ. Ví dụ: tôi không thể đứng BASH và cần sử dụng ZSH, làm cách nào để tạo ZSH được tải cùng với hồ sơ của tôi ( .zsh_profile) khi tôi ssh vào máy.

Tôi cũng không muốn phải truyền một loạt các tham số với ssh, tôi có thể đặt shell mặc định không?

Câu trả lời:


34

Giả sử bạn đang chạy trên Linux, bạn có thể sử dụng chshlệnh.

chsh -s /bin/ksh foo
chsh -s /bin/bash username

4
Xin lưu ý rằng đường dẫn đến nhị phân phải nằm trong /etc/shellstrình bao để có thể chọn.
Kimvais

Ubuntu 16.04 không có lệnh này.
david.perez

@ david.perez Có nó, trong các passwdgói .
tráng miệng

Điều này không hoạt động khi xác thực được xử lý thông qua LDAP
Daniel Kats

10

man chsh thay đổi vỏ, không phải lúc nào cũng hoạt động

Ngoài ra, bạn có thể dính exec /bin/zshvào tập lệnh đăng nhập bash của mình. Điều này sẽ thay thế ví dụ bash bằng shell của bạn.

Hoặc bạn có thể làm ssh host "zsh -l"


Tại sao -1 (15 ký tự ...)?
Noufal Ibrahim

đó là một trường hợp thấp hơnL
driftcatcher

1
ssh -tlà cần thiết để có được một TTY cho các tùy chọn cuối cùng. Theo mặc định nếu một lệnh (như zsh -l) được cung cấp, OpenSSH sẽ thực hiện shell không đăng nhập, sẽ không phân bổ TTY cho bạn và -lsẽ không thay đổi điều đó (vì điều đó được thực thi sau khi đăng nhập).
Franklin Yu

8

Chỉnh sửa / etc / passwd (nếu bạn có quyền hoặc yêu cầu quản trị viên hệ thống của bạn) thay đổi trình bao mặc định của bạn.


Vì một số lý do, những người dùng tôi tạo gần đây không có vỏ mặc định. Điều này làm việc cho tôi. Cảm ơn.
mimoralea

2
Cảm ơn câu trả lời này là tuyệt vời. Tôi cũng không có vỏ ở đây. Tôi tìm thấy dòng tên người dùng: x: 1000: 1000 :: / home / myusername: và thêm / bin / bash vào cuối. Đăng xuất và đăng nhập và phiên ssh của tôi đang sử dụng bash :)
Stewart Evans

6

Nếu bạn không thể thay đổi vỏ mặc định của mình, sẽ ssh -t user@host 'zsh -l'hoạt động.

Các -tlá cờ buộc phân bổ pseudo-tty, và -lbầy cờ một vỏ đăng nhập .


4

Tôi không chắc làm thế nào bạn có thể đặt cục bộ của mình .zshrcvào máy chủ từ xa, (mà không lưu trữ vĩnh viễn ở đó), điều này giúp tôi thay đổi vỏ đăng nhập của mình trên máy chủ từ xa.

Vì đó là tài khoản dùng chung, tôi chỉ có thể sử dụng zshcho bản thân mình với phương pháp này.

Thêm phần này vào ~/.ssh/configtập tin của bạn trong máy cục bộ của bạn.

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

Có thể có cách hackish để thực hiện những gì bạn đang tìm kiếm, như dưới đây.

CẢNH BÁO Điều này không có gì đảm bảo và không có vẻ 'khôn ngoan', tuy nhiên tôi đã quản lý để đưa tệp cục bộ của mình lên máy chủ và lấy nó trong vỏ đăng nhập bằng cách này.

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

Làm thế nào nó hoạt động?

  • RemoteCommand xác định những gì cần phải được chạy ở phía xa.
  • LocalCommandđịnh nghĩa những gì cần được chạy trên cục bộ, được sử dụng để sao chép tệp cục bộ của bạn vào máy chủ từ xa để tìm nguồn cung ứng. Đây là một nhược điểm, nó chỉ xảy ra sau khi kết nối 'thành công' với máy chủ từ xa.

Ý nghĩa:

  1. Kết nối của bạn với điều khiển từ xa phải mở và sống động
  2. Shell từ xa của bạn chưa có tệp, vì vậy nó phải đợi cho đến khi tệp ở đó, ergo sleep
  3. Sử dụng cục bộ của bạn sftpđể đặt tệp của bạn đến máy chủ từ xa, máy chủ từ xa thức dậy sleepvà lấy các tập lệnh của bạn.

Đó là siêu hackish, tôi muốn biết nếu có một cách tốt hơn, quá.

Cập nhật: Điều này có thể được sử dụng thay vì thời gian ngủ 'dài':
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'

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.