履歴ファイル内で SSH を使用する場合にホスト名を自動補完する

履歴ファイル内で SSH を使用する場合にホスト名を自動補完する

私は、ファイルや.bash_historyをいじることなく、自分が時々「sshed」して自分のファイル内にあるサーバーを自動補完し、自分の から取得する機能を探しています。known_hosts/etc/bash_completitionhistory

known_hostsそこにある情報は「暗号化」されているようなので、ファイルをいじることはできません。これを回避する方法を探すことはそれほど重要ではありません。

例えば

$ tail -n 2 ~/.ssh/known_hosts
|1|D90I41jNxFy83ZhAoyG7gj0+LpM=|Zkru+0Yi9Q9UNafHpj1IVMGGnAw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==
|1|Cl6c716uEoPmovaRDDwkM+bYFTc=|VXUrsTRDptMOg/Nm3anFMwjy5O8= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==

私は見つけたこの解決策しかし、他の重要ではない理由により、ファイルがありません~/.ssh/config

答え1

もっと簡単な方法は、 内の のハッシュを無効にしてknown_hostsすべてHashKnownHosts no~/.ssh/config履歴からのオートコンプリートを許可するか、 にホストをリストするだけです~/.ssh/config(そこにPortsとをすべて保存したりUsers、エイリアスを作成したりできます)。

私はその創造性を評価しますが、すでに同じ機能がすぐに使えるのに、なぜ車輪の再発明をする必要があるのでしょうか (HashKnownHosts yesこの機能が壊れるデフォルトで出荷される Ubuntu を除く)。

答え2

そのため、ファイル内のホスト ターゲットを自動補完する方法を知りたいだけだったのでbash_history、同じ状況にある人の役に立つことを期待してこの機能を見つけました。

次の行を実行するだけです

$ complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
  • complete- はbashの組み込み関数です。したがって、システム上にバイナリはありません。これは、を押したときにコマンドがどのように完了するかを処理します。
  • -W- 自動補完単語リストを作成する
  • grep '^ssh' .bash_history.bash_history-ファイルからsshで始まるすべての行を返す
  • sort -u- 出力行を一意にする
  • sed 's/^ssh //'ssh-各行の先頭の文字列を削除します
  • ssh-sshコマンド実行時

またはssh hostnameなどの他の機能を使用するだけでなく、または機能のみを使用して、または自動補完したいものだけを保持する必要があります。ssh user@hostnamessh user@hostname -p 2222regexgrep|sedhostname

.bashrcセッションを開始するたびにオートコンプリート機能が動作するように、ファイル に完全な行を挿入します。

関連情報