일부 서버를 구성했습니다.~/.ssh/config
, 와 alpha
같은 beta
. 구성된 서버의 이름을 명령하고 자동 완성하도록 Bash를 어떻게 구성합니까?$ ssh alTab
$ scp file.tgz alTab
서버를 추가하고 싶지 않습니다.다른서버를 정기적으로 추가 및 제거하고 목록이 상당히 크기 때문에 한 번에 하나의 파일(예: Bash 배열)이 추가됩니다.
이것은 Kubuntu 12.10에 있으며 나는 가지고 있습니다배쉬 완료설치하다.
답변1
그것을 발견! !
우분투 아래에있는 것 같습니다의 항목이 ~/.ssh/known_hosts
해시되었습니다.이므로 SSH 완료에서는 읽을 수 없습니다. 이는 버그가 아닌 기능입니다. 을 추가해도 호스트 해시를 방지 할 수 HashKnownHosts no
없습니다 .~/.ssh/config
/etc/ssh/ssh_config
그런데 제가 관심 있는 호스트는 에서도 발견됩니다 ~/.ssh/config
. 다음은 이 파일에서 항목을 읽는 Bash 완료 스크립트입니다.
_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
해당 스크립트를 넣고 /etc/bash_completion.d/ssh
다음을 사용하여 가져옵니다.
$ . /etc/bash_completion.d/ssh
내가 찾은이 가이드(Archive.org 사본)은 매우 귀중하며, 그것 없이는 이 스크립트를 작성할 수 없습니다. 감사해요스티브 켐프훌륭한 가이드를 작성해주셔서 감사합니다!
답변2
미리 포장된
어떤 배포판을 사용하고 있는지는 밝히지 않았지만 내 Fedora 19 시스템에는 bash-completion
이 완성 규칙 파일을 통해 이 기능을 제공하는 다음 패키지가 설치되어 있습니다.
/usr/share/bash-completion/completions/ssh
내가 설치한 패키지는 다음과 같습니다.
$ rpm -aq |grep completion
bash-completion-2.1-2.fc19.noarch
규칙 파일을 보면 $HOME/.ssh/config
파일에 대해 묻는 섹션이 표시됩니다.
$ grep config /usr/share/bash-completion/completions/ssh
local configfile
local -a config
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile
# Search COMP_WORDS for '-F configfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile prefix
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -c -a -F "$configfile" "$cur"
너 자신을 굴려 라.
나는 또한 이 요점을 발견했습니다.Known_hosts_autocomplete.sh, $HOME/.ssh/known_hosts
파일을 제외하고 유사한 작업을 수행합니다.
# add to ~/.bash_profile, and close/reopen a shell. Will autocomplete any
# hosts found in known_hosts.
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | \
sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh
$HOME/.ssh/config
어떤 이유로 ssh
사전 패키지된 완료 규칙 파일을 찾을 수 없는 경우 비슷한 작업을 수행할 수 있습니다.
답변3
Ubuntu가 알려진 호스트를 해시하기 때문에 자동 완성이 작동하지 않는 것을 발견했습니다. 당신은 추가할 수 있습니다
Host *
HashKnownHosts no
파일 에 저장 .ssh/config
되지만 기존 호스트는 해시되지 않습니다.
답변4
Ubuntu 14.04에서는 ssh
언급한 서버를 자동 완성합니다.~/.ssh/config
제가 정기적으로 방문하는 서버 중 하나만 자동으로 수행하고 있다는 것을 깨달았을 때 이 사실을 깨달았습니다. 둘 사이의 유일한 차이점은 SSH 구성 파일의 인증 관련 항목입니다. 또한 다른 서버의 구성 파일에 새 항목을 추가하면 자동으로 완료되기 시작했습니다.
질문하신 분들을 위한 항목은 다음과 같습니다.
HOST server-name
GSSAPIAuthentication=no
구성에 지정한 내용이 중요하다면(물론 여전히 유효한 한) 매우 놀랄 것입니다.