Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UserKnownHostsFile配置不支持%k #158

Open
yingwenbo opened this issue Nov 22, 2024 · 4 comments
Open

UserKnownHostsFile配置不支持%k #158

yingwenbo opened this issue Nov 22, 2024 · 4 comments

Comments

@yingwenbo
Copy link

ssh要连很多服务器,用统一的UserKnownHostFile,里面会又几百行,用ssh时,可以用%k每个服务器写一个文件,用tssh不支持
expand UserKnownHostsFile [/.ssh/known_hosts.d/%k] failed: token [%k] in [/.ssh/known_hosts.d/%k] is not supported yet

@lonnywong
Copy link
Member

%k The host key alias if specified, otherwise the original remote hostname given on the command line.

要抽空实现一下才行,https://github.com/trzsz/trzsz-ssh/blob/main/tssh/tokens.go

@lonnywong
Copy link
Member

%k%n 的值看起来是差不多的,现在是支持 %n 的。

%k%n 的区别我还没研究出来,如果你知道,麻烦告知一下。

@yingwenbo
Copy link
Author

yingwenbo commented Nov 22, 2024

%n可以用,当没有设置HostKeyAlias时效果时一样的
当有设置HostKeyAlias时,%k会被替换成设置值;
另外,设置HashKnownHosts no时,knowhosts文件的第一个字段,用ssh会被替换成HostKeyAlias,tssh则是hostname

问了一下gpt:

ssh_config 配置文件中,%k%n 是两种特殊的扩展符号,分别代表不同的信息:

  1. %k

    • 代表 HostKeyAlias 的值。
    • 如果在配置中指定了 HostKeyAlias%k 会被替换为该值;如果没有指定,则不会展开为任何值。
    • 主要用于解决主机密钥校验的问题,比如在某些情况下,多个主机可能共享相同的 IP 地址,但使用不同的主机密钥时,可以通过设置 HostKeyAlias 来区分。
  2. %n

    • 代表原始的主机名(Host)。
    • 这是你在命令行上直接指定的主机名,即 ssh user@hostname 中的 hostname
    • ssh_config 文件中的其他配置可以基于 %n 来动态引用主机名。

举例

假设有如下 ssh_config

Host example
    HostName realhost.example.com
    HostKeyAlias alias.example.com
    User user
    ProxyCommand ssh -W %h:%p gateway.example.com
    LogFile /var/log/ssh/%n.log
  • %k 会被替换为 alias.example.com(即 HostKeyAlias 的值)。
  • %n 会被替换为 example(即你在命令中使用的别名)。

当运行以下命令时:

ssh example
  1. ProxyCommand 中的 %h:%p

    • %h 展开为 realhost.example.com(从 HostName 获取)。
    • %p 是目标主机的端口,默认为 22
  2. LogFile 中的 %n

    • %n 展开为 example,所以日志会记录到 /var/log/ssh/example.log

总结

  • %k 是与 HostKeyAlias 相关,解决主机密钥校验的场景。
  • %n 是你在命令行中使用的主机别名,通常用于日志、脚本动态生成等场景。

lonnywong added a commit that referenced this issue Nov 30, 2024
@lonnywong
Copy link
Member

已支持。

v0.1.23 发布前,可以这样安装 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main,安装的路径在 ~/go/bin/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants