非常新手问题!
我打开了两个不同的服务器,这两个服务器都是同一个Amazon AWS群集的一部分。 他们不是由我经营的。
在一个SSH会话,terminal让我自动完成。 在另一个会议上,它不 – 我希望这样做。
这是为什么 – 这是服务器pipe理员设置的选项吗?
我能做些什么吗?
谢谢!
这不是一个真正的编程问题,但它与你的shell有关。 您可以尝试启动bash shell(通过在提示符下键入bash )并查看是否可以自动完成。
如果可行,你可以使用which bash来validation它的位置,然后用chsh -s /bin/bash来永久设置你的shell。
可用的shell列表也可以在/etc/shells 。
这是在你的SSH会话中使用的shell的组合以及它的configuration。
虽然你的shell可能支持自动完成,但可能没有configuration它。 如果您使用的是bash shell,您可以编辑您的本地.bashrc文件以提供自动完成。
# enable bash completion in interactive shells if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
IIRC它也可能是一个问题,ssh散列〜/ .ssh / known_hosts中的主机名
我知道的大多数安装使用〜/ .ssh / known_hosts作为完成可用主机列表的源,但一些系统也开始设置“HashKnownHosts yes”,禁止使用known_hosts作为源。
如果你已知的主机行开始类似的东西
|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4
然后散列被激活。
复制自己的答案在unix.SE :
特别是在Ubuntu 中, ~/.ssh/known_hosts中的条目被散列 ,所以SSH完成无法读取它们。 这是一个function,而不是一个错误。 即使通过添加HashKnownHosts no ~/.ssh/config和/etc/ssh/ssh_config我无法阻止主机散列。
但是,我感兴趣的主机也在~/.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
我发现这个指南是非常宝贵的,如果没有它,我将无法编写脚本。 谢谢史蒂夫·坎普写这个了不起的向导!