非常新手的问题!
我正在 SSH 到两个不同的服务器,它们都属于同一个 Amazon AWS 集群。它们不是由我运行的。
在一个 ssh 会话中,终端允许我自动完成。在另一个会话中,它却不允许 - 我希望它允许。
为什么会这样 - 这是服务器管理员设置的选项吗?
我能做些什么呢?
谢谢!
答案1
这实际上不是一个编程问题,但它与你的 shell 有关。你可以尝试启动 shell bash
(通过bash
在提示符下输入)并查看是否可以自动完成。
如果有效的话,您可以用它which bash
来验证它的位置,然后chsh -s /bin/bash
永久设置您的 shell。
您还可以在 中找到可用的 shell 列表/etc/shells
。
答案2
它是您的 ssh 会话中使用的 shell 及其配置的组合。
虽然您的 shell 可能支持自动完成功能,但可能未对其进行配置。如果您使用的是 bash shell,则可以编辑本地 .bashrc 文件以提供自动完成功能。
# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
答案3
似乎特别是在 Ubuntu 中中的条目~/.ssh/known_hosts
被散列,因此 SSH 完成无法读取它们。这是一个功能,而不是错误。即使添加到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
答案4
IIRC 也可能是 ssh 对 ~/.ssh/known_hosts 中的主机名进行哈希处理的问题
我知道的大多数安装都使用 ~/.ssh/known_hosts 作为可用主机列表的来源,但有些系统也开始设置“HashKnownHosts yes”,禁止使用 known_hosts 作为来源......
如果你的已知主机行以类似以下内容开头
|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4
然后散列就被激活了。