ssh
나는 일반적으로 항상 사용하는 서버를 많이 가지고 있습니다 . bash
또는를 사용하여 호스트 이름 목록을 유지 zsh
하고 bash 자동 완성이 파일 전체를 반복하도록 하고 호스트 이름의 처음 몇 글자를 입력할 때 해당 문자로 시작하는 상자에 대한 제안을 제공할 수 있는 방법이 있습니까?
답변1
이것배쉬 완료패키지에는 ssh
다음을 포함한 명령 완성이 포함되어 있습니다.
ssh
ssh-add
ssh-copy-id
sshfs
여기에서 소스 코드를 찾아볼 수 있습니다.https://alioth.debian.org/scm/browser.php?group_id=100114
답변2
Zsh
완성은 소위 ssh 북마크를 사용하여 작동합니다. 이것들은 ~/.ssh/config
.
예를 들어,
host baz
hostname 192.168.1.2
port 22
user warrick
host bar
hostname example.com
port 2200
user kevin
identityfile /home/warrick/.ssh/ec2.pem
man ssh_config
전체 옵션 목록을 확인하세요.
편집하다
나는 완료 스크립트를 사용하고 있습니다.오메지쉬:
https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/completion.zsh
비슷한 방법으로 ohmyzsh
위의 스크립트 ~/.zsh/libs/completion.zsh
를 넣고 ~/.zshrc
.
# ~/.zshrc
for f in ~/.zsh/libs/*; do
source $f
done
답변3
복사한 곳unix.SE에 대한 내 답변:
Ubuntu 호스트를 사용하는 경우 Ubuntu에서 이를 알아야 합니다.의 항목이 ~/.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 | awk '{print $2}')
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
해당 스크립트를 넣고 /etc/bash_completion.d/ssh
다음을 사용하여 가져옵니다.
$ . /etc/bash_completion.d/ssh
내가 찾은이 가이드이것은 매우 귀중하며 이것이 없이는 이 스크립트를 작성할 수 없습니다. 감사해요스티브 켐프훌륭한 가이드를 작성해주셔서 감사합니다!
답변4
이렇게 하려면 완료하려는 호스트를 파일에 넣으세요 /etc/hosts
.
또한 bash-completion
패키지(/etc/bash_completion 파일과 /etc/bash_completion.d 디렉토리 포함)가 필요합니다.
~/.bashrc에서 가져옵니다( . /etc/bash_completion
-때때로 /etc/bash.bashrc 또는 ~/.bashrc에서 주석 처리됨).