なぜ一部のSSHセッションはオートコンプリートを提供し、一部は提供しないのですか?


10

非常に初心者の質問!

同じAmazon AWSクラスターに属している2つの異なるサーバーに接続しています。彼らは私が運営しているのではありません。

1つのsshセッションで、ターミナルはオートコンプリートを許可します。他のセッションでは、そうではありません。

これはなぜですか-サーバー管理者が設定するオプションですか?

そして、私はそれについて何ができますか?

ありがとう!

回答:


15

これは実際にはプログラミングの問題ではありませんが、シェルに関係しています。bashbashプロンプトで入力して)シェルを起動して、オートコンプリートできるかどうかを確認できます。

それが機能する場合は、それを使用which bashしてその場所を確認しchsh -s /bin/bash、シェルを永続的に設定できます。

使用可能なシェルのリストは、にもあります/etc/shells


なんらかの理由でシェルを変更できません。ルートとしてそれを行う方法はありますか?You may not change the shell for 'counterstrike'.
トマーシュZato -復活モニカ

3

これは、sshセッションで使用されているシェルとその構成の組み合わせです。

シェルはオートコンプリートをサポートしている場合がありますが、構成されていない場合があります。bashシェルを使用している場合は、ローカルの.bashrcファイルを次のように編集して、オートコンプリートを提供できます。

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

1
bash補完パッケージは、コマンドラインオプション、サーバー名、VCSリポジトリディレクトリなどのより高度な補完にのみ必要です。コマンド、ディレクトリ、ファイル名、変数、ユーザー名の補完は、それなしでも機能します。
AK2

2

unix.SEに関する自分の回答からコピー:

特にUbuntu ではエントリ~/.ssh/known_hostsがハッシュ化されているため、SSHの完了でエントリを読み取ることができないようです。これはバグではなく機能です。でも追加することによって、HashKnownHosts no~/.ssh/configし、/etc/ssh/ssh_configIホストハッシュを防ぐことができませんでした。

ただし、私が興味を持っているホストはにもあります~/.ssh/config。次に、そのファイルからエントリを読み取るBash Completionのスクリプトを示します。

_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

そのスクリプトを配置/etc/bash_completion.d/sshし、次のコマンドを使用してソースを指定します。

$ . /etc/bash_completion.d/ssh

私が見つかりました。このガイドは、非常に貴重な、私はこのそれなしでスクリプトにできなかったでしょう。その素晴らしいガイドを書いてくれたSteve Kempに感謝します!


1

IIRC sshが〜/ .ssh / known_hostsのホスト名をハッシュすることも問題である可能性があります

私が知っているほとんどのインストールでは、完了に利用可能なホストのリストのソースとして〜/ .ssh / known_hostsを使用していますが、一部のシステムは "HashKnownHosts yes"を設定し始め、既知のホストをソースとして使用することを禁止しています...

既知のホスト行が次のようなもので始まる場合

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

その後、ハッシュがアクティブになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.