Tại sao một số phiên ssh cung cấp tự động hoàn thành và một số không?


10

Câu hỏi rất mới!

Tôi đang tìm đến hai máy chủ khác nhau, cả hai đều thuộc cùng một cụm Amazon AWS. Họ không chạy theo tôi.

Trong một phiên ssh, thiết bị đầu cuối cho phép tôi tự động hoàn thành. Trong phiên khác, nó không - tôi ước nó đã làm.

Tại sao điều này - nó là một tùy chọn được đặt bởi quản trị viên máy chủ?

Và tôi có thể làm bất cứ điều gì về nó?

cảm ơn!

Câu trả lời:


15

Đây thực sự không phải là một câu hỏi lập trình, nhưng nó phải liên quan đến vỏ của bạn. Bạn có thể thử khởi động bashshell (bằng cách gõ bashtại dấu nhắc) và xem liệu bạn có thể tự động hoàn thành hay không.

Nếu nó hoạt động, bạn có thể sử dụng which bashđể xác minh vị trí của nó và sau đó chsh -s /bin/bashđể đặt vỏ của bạn vĩnh viễn.

Một danh sách các vỏ có sẵn cũng có thể được tìm thấy trong /etc/shells.


Tôi không thể thay đổi vỏ của tôi vì một số lý do. Có cách nào để làm điều đó như root? You may not change the shell for 'counterstrike'.
Tomáš Zato - Phục hồi

3

Nó là sự kết hợp của shell đang được sử dụng trong phiên ssh của bạn cũng như cấu hình của nó.

Mặc dù shell của bạn có thể hỗ trợ tự động hoàn thành nhưng nó có thể không được cấu hình cho nó. Nếu bạn đang sử dụng bash shell, bạn có thể chỉnh sửa tệp .bashrc cục bộ của mình để cung cấp tự động hoàn tất.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

1
Gói hoàn thành bash chỉ cần thiết để hoàn thành nâng cao hơn những thứ như tùy chọn dòng lệnh, tên máy chủ, thư mục kho lưu trữ VCS, .... Hoàn thành các lệnh, thư mục, tên tệp, biến và tên người dùng hoạt động mà không có nó.
ak2

2

Sao chép từ câu trả lời của riêng tôi trên unix.SE :

Có vẻ như cụ thể trong Ubuntu các mục trong ~/.ssh/known_hostsđược băm , vì vậy hoàn thành SSH không thể đọc chúng. Đây là một tính năng, không phải là một lỗi. Ngay cả bằng cách thêm HashKnownHosts novào ~/.ssh/config/etc/ssh/ssh_configtôi không thể ngăn chặn việc băm máy chủ.

Tuy nhiên, các máy chủ mà tôi quan tâm cũng được tìm thấy trong ~/.ssh/config. Đây là một kịch bản cho Bash Hoàn thành đọc các mục từ tệp đó:

_ssh() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts=$(grep '^Host' ~/.ssh/config | awk '{print $2}')

    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
    return 0
}
complete -F _ssh ssh

Đặt tập lệnh đó vào /etc/bash_completion.d/sshvà sau đó lấy nó bằng lệnh sau:

$ . /etc/bash_completion.d/ssh

Tôi thấy hướng dẫn này là vô giá và tôi sẽ không thể viết kịch bản này nếu không có nó. Cảm ơn Steve Kemp đã viết hướng dẫn tuyệt vời đó!


1

IIRC nó cũng có thể là một vấn đề mà ssh băm tên máy chủ trong ~ / .ssh / know_hosts

hầu hết các cài đặt tôi biết đều sử dụng ~ / .ssh / know_hosts làm nguồn cho danh sách các máy chủ có sẵn để hoàn thành nhưng một số hệ thống cũng bắt đầu đặt "HashKnownhosts yes", cấm sử dụng know_hosts làm nguồn ....

nếu dòng máy chủ đã biết của bạn bắt đầu bằng một cái gì đó như

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

sau đó băm được kích hoạt.

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.